2015-01-04 17 views
6

Tôi không thể tìm thấy câu hỏi tương tự trên SO.bash - pass script làm đối số của tập lệnh khác

Làm cách nào tôi có thể truyền một tập lệnh bash đúng cách thành một đối số cho một tập lệnh bash khác.

Ví dụ: giả sử tôi có hai tập lệnh có thể chấp nhận một số tham số, tôi muốn chuyển một tập lệnh làm đối số của một tham số khác. Một cái gì đó như:

./script1 (./script2 file1 file2) file3 

Trong ví dụ trên, script2 kết hợp file1 và file2 với nhau, và Echos một tập tin mới, tuy nhiên đó là không liên quan đến câu hỏi. Tôi chỉ muốn biết cách tôi có thể vượt qua script2 làm thông số, tức là cú pháp thích hợp.

Nếu điều này là không thể, bất kỳ gợi ý nào về cách tôi có thể phá vỡ vấn đề sẽ phù hợp.

+0

Làm thế nào để bạn định sử dụng 'script2', một khi bạn đã" chuyển "nó sang' script1'? –

+0

Hiện tại, tôi không hoàn toàn chắc chắn, 'tập lệnh1' mà tôi đang sử dụng chỉ lặp qua tất cả nội dung của các tham số. Nhưng, tôi chỉ quan tâm đến việc tìm hiểu làm thế nào tôi có thể vượt qua kịch bản như một tham số, bởi vì nó không làm việc cho tôi. – Bolboa

+2

Nó vẫn không rõ ràng với tôi những gì bạn đang hướng tới để đạt được, hoặc những gì nó thực sự có nghĩa là để vượt qua một kịch bản như một tham số. Tham số chỉ là chuỗi. Có lẽ bạn muốn chạy 'script2' truyền các tên tập tin' file1' và 'file2' tại một số điểm. Nó có đủ để vượt qua kết quả của hành động này không? –

Trả lời

3

Nếu bạn muốn vượt qua script2 như một cuộc tranh cãi để script1 để thực hiện nó bên người cuối cùng, chỉ cần đặt đoạn mã sau bên script1 và gọi script1 như thế này:

./script1 "./script2 file1 file2" file3 # file4 file5 

Mã bên trong script1:

$1 # here you're executing ./script2 file1 file2 
shift 
another_command "[email protected]" # do anything else with the rest of params (file3) 

Hoặc nếu bạn biết số lượng các params để script2 và nó là cố định, bạn cũng có thể làm điều đó như sau:

./script1 ./script2 file1 file2 file3 # file4 file5 

Mã bên script1:

"$1" "$2" "$3" 
shift 3 
another_command "[email protected]" # do anything else with the rest of params (file3) 
5

Nếu bạn muốn chuyển kết quả đánh giá tập lệnh 2 làm tham số, hãy sử dụng $(). Hãy nhớ rằng bạn phải trích dẫn nó.

./script1 "$(./script2 file1 file2)" file3 
+7

Nơi _evaluating_ có nghĩa là _capturing đầu ra tiêu chuẩn như một tham số duy nhất_. – kojiro

Các vấn đề liên quan