Viết tập lệnh Unix (bash) tạo thư mục ở vị trí được chỉ định tại dòng lệnh


0

Tôi hiện có một tập lệnh Unix (được viết bằng bash) thực thi một số lệnh để sửa đổi một nhóm các tệp, mà tôi chỉ định với một flist chứa đường dẫn của chúng. Ý tưởng chung của tập lệnh là tạo một thư mục, đặt các tệp từ flist trong thư mục đó và sau đó thực hiện các quy trình tiếp theo, một vài trong số đó đang tạo thêm thư mục.

Vấn đề mà tôi gặp phải là tôi phải chỉ định đường dẫn tệp chính xác nơi tôi muốn các thư mục được đặt trong chính tập lệnh. Vì vậy, câu hỏi của tôi là: có cách nào để viết tập lệnh để tôi có thể nhập lệnh và sau đó là đường dẫn của thư mục đích nơi tôi muốn tập lệnh được thực thi trên dòng lệnh và tạo các thư mục ban đầu và tiếp theo bởi tập lệnh trong thư mục ban đầu mà không phải cung cấp bất kỳ đường dẫn nào của chúng (tức là 'lệnh / đích / đường dẫn / cho / script /')?

Xin lỗi nếu điều này hơi dài dòng. Tôi rất mới với Unix và có rất ít kinh nghiệm (và do đó không thể đưa ra từ ngữ tốt hơn). Bất kỳ trợ giúp đều được đánh giá cao!

Câu trả lời:


3

Nếu tôi hiểu bạn một cách chính xác, bạn đang hỏi làm thế nào để chuyển các giá trị cho tập lệnh bash. Điều này rất dễ dàng, ví dụ:

#!/usr/bin/env bash
directory=$1;
echo "Directory is $directory"

$1 là đối số dòng lệnh đầu tiên của tập lệnh bash. $2 là thứ hai, v.v. Vì vậy, bạn có thể chạy đoạn script trên như vậy:

./foo.sh /path/to/bar
Directory is /path/to/bar

Nếu bạn muốn lệnh cũng là một biến, bạn có thể làm một cái gì đó như thế này:

 #!/usr/bin/env bash
 command=$1;
 directory=$2
 $command $directory

Vì vậy, để chạy ls /etc, bạn sẽ chạy đoạn script trên như thế này:

./foo.sh ls /etc

+1 để trình bày một giải pháp di động (sử dụng env).
Hennes

Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn!!
David

0

Tôi tưởng tượng rằng bạn có tập tin ở một nơi ( /path/to/originals ) và muốn sao chép chúng vào một vị trí đích ( /path/to/destination ) và sửa đổi chúng sau đó. Kịch bản hiện tại của bạn trông như:

mkdir /path/to/destination
cp /originals/this-file /path/to/destination
cp /originals/this-other-file /path/to/destination
modify-somehow /path/to/destination/this-file
modify-somehow /path/to/destination/this-other-file

nhưng bạn không muốn phải mã hóa cứng / đường dẫn / đến / đích ở mọi nơi. Vì vậy, bạn có thể yêu cầu sử dụng "giá trị của tham số vị trí đầu tiên" thay vì mã hóa /path/to/destination. Như những người khác đã đề cập, giá trị của tham số vị trí đầu tiên là $1.

Vì vậy, kịch bản của bạn nên là:

mkdir $1
cp /originals/this-file $1
cp /originals/this-other-file $1
modify-somehow $1/this-file
modify-somehow $1/this-other-file

Và bạn nên gọi điều này bằng cách thêm đường dẫn đích làm đối số:

my-script /path/to/destination

Tôi đã cố gắng để giữ cho tập lệnh đơn giản, nhưng bạn có thể cải thiện nó, như sử dụng một tập lệnh cp lệnh để sao chép một số tập tin. Bạn cũng có thể sử dụng một biến cho /originals đường dẫn (nhưng thay vì một đối số, điều này nghe giống như một khai báo liên tục ở đầu tập lệnh của bạn)

Cuối cùng, hãy xem xét rằng nếu tên tệp của bạn có khoảng trắng, bạn sẽ cần phải bao quanh $1 trong dấu ngoặc kép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.