Ответ 1
Попробуйте следующее:
cat script.sh | ssh some_server bash -s - <arguments>
Я хотел бы немного подробнее остановиться на Bash - Как передать аргументы в script, которые читаются через стандартный ввод. post.
Я хотел бы создать script, который принимает стандартный ввод и запускает его удаленно, передавая ему аргументы.
Упрощенное содержимое script, которое я создаю:
ssh server_name bash <&0
Как принять следующий метод принятия аргументов и применить его к script?
cat script.sh | bash /dev/stdin arguments
Возможно, я делаю это неправильно, просьба также предоставить альтернативные решения.
Попробуйте следующее:
cat script.sh | ssh some_server bash -s - <arguments>
ssh
не должно иметь значения:
$ 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
Этот вариант на ccarton answer также работает хорошо:
ssh some_server bash -s - < script.sh <arguments>