I would like to expand a little more on "Bash - How to pass arguments to a script that is read via standard input" post.
I would like to create a script that takes standard input and runs it remotely while passing arguments to it.
Simplified contents of the script that I'm building:
ssh server_name bash <&0
How do I take the following method of accepting arguments and apply it to my script?
cat script.sh | bash /dev/stdin arguments
Maybe I am doing this incorrectly, please provide alternate solutions as well.
We can pass parameters just after the name of the script while running the bash interpreter command. You can pass parameters or arguments to the file.
Arguments can be passed to the script when it is executed, by writing them as a space-delimited list following the script file name. Inside the script, the $1 variable references the first argument in the command line, $2 the second argument and so forth. The variable $0 references to the current script.
Try this:
cat script.sh | ssh some_server bash -s - <arguments>
ssh
shouldn't make a difference:
$ 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With