2011-12-16 31 views
12

Tôi muốn mở rộng thêm một chút về bài đăng "Bash - How to pass arguments to a script that is read via standard input".Bash - Cách chuyển đối số cho tập lệnh được đọc qua đầu vào tiêu chuẩn được chuyển hướng

Tôi muốn tạo tập lệnh có đầu vào tiêu chuẩn và chạy tập lệnh từ xa trong khi chuyển đối số cho nó.

nội dung đơn giản của kịch bản mà tôi đang xây dựng:

ssh server_name bash <&0 

Làm thế nào để lấy phương pháp sau đây của các đối số chấp nhận và áp dụng nó vào kịch bản của tôi không?

cat script.sh | bash /dev/stdin arguments 

Có thể tôi đang làm điều này không chính xác, vui lòng cung cấp giải pháp thay thế.

+0

Lệnh -line args là không đủ cho ứng dụng này? –

+0

Làm cách nào để cung cấp các đối số dòng lệnh cho 'ssh server_name bash <& 0 ', để chúng không được hiểu là tùy chọn bash? – dabest1

Trả lời

14

Hãy thử điều này:

cat script.sh | ssh some_server bash -s - <arguments> 
2

ssh không nên tạo sự khác biệt:

$ cat do_x 
#!/bin/sh 

arg1=$1 
arg2=$2 
all_cmdline=$* 
read arg2_from_stdin 

echo "arg1: ${arg1}" 
echo "arg2: ${arg2}" 
echo "all_cmdline: ${all_cmdline}" 
echo "arg2_from_stdin: ${arg2_from_stdin}" 

$ echo 'a b c' > some_file 
$ ./do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
$ ssh some-server do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
+0

Xin lỗi, đây không phải là ý tôi. Lấy ví dụ của bạn 'ssh một số máy chủ do_x 1 2 3 4 5 dabest1

+0

Tôi không hiểu. Bạn đang cố gắng để viết shell của riêng bạn trong 'do_x'? –

+0

Tôi đang cố gắng tạo tập lệnh trình bao bọc chạy từ xa bất kỳ tập lệnh nào được cung cấp. Ngoài ra tôi muốn hỗ trợ bất kỳ đầu vào đường ống nào. – dabest1

0

Phiên bản này trên ccarton 's answer cũng dường như làm việc tốt:

ssh some_server bash -s - < script.sh <arguments> 
Các vấn đề liên quan