当前,我遇到了将带有参数的脚本传递给bash的问题。限制是我可以将它们作为字符串传递(请参阅$ COMMAND)
ssh user@server 'bash -s' < "$COMMAND"
如果我的$ COMMAND包含“ foo.sh bar baz”,我将收到错误no such file or directory: foo.sh bar baz
此外,我还可以为bash设置其他选项。
预先感谢您!
答案 0 :(得分:2)
根本问题是<
需要重定向的文件名,而不是文件名和一些参数。这样将两者混合在一起是行不通的。
如果我理解正确,那么您想运行本地计算机上存在的脚本,但要在远程计算机上执行该脚本(使用提供的参数)。在这种情况下,您要运行的内容如下:
ssh user@server 'bash -s bar baz' <"foo.sh"
请注意,参数传递的位置与脚本文件名的传递位置完全不同。如果可能的话,我建议不要将两者混在一起。将它们放在单独的变量中,然后使用类似以下的内容:
ssh user@server "bash -s $scriptargs" <"$scriptfile"
答案 1 :(得分:0)
从错误的声音来看,foo.sh
在服务器上不存在,因此失败。
最简单的解决方案似乎是:
ssh user@server 'foo.sh bar baz'
,前提是服务器上存在“ foo.sh”。
如果服务器上不存在“ foo.sh”,您是否尝试过使用here docs?例如:
ssh user@server "cat > foo.sh && chmod u+x foo.sh && ./foo.sh bar baz" << "EOF"
`heredoc> #Put your contents of foo.sh here
`heredoc> #And put them here
`heredoc> echo "Argument 1: $1"
`heredoc> echo "Argument 2: $2"
`heredoc> EOF
user@server's password:
Argument 1: bar
Argument 2: baz
编辑:
david@localhost ~ % bash -s < test.sh David Finder
Hello David
Hello Finder
编辑为我的上一个答案,问题是由于引用了输入到Bash的输入引号引起的,因为它将整个输入视为一个文件(它正在寻找一个字面名为“ foo.sh bar baz”的文件,内的空格。