我有一个脚本需要通过ssh执行作为另一种用途,有没有办法像这样传递整个脚本:
ssh -t user@server.com sudo -u user2 sh -c << EOF
cd /home
ls
dir=$(pwd)
echo "$dir"
echo "hello"
....
EOF
返回: sh:-c:选项需要参数
单独ssh'ing 和 sudo'ing 不是一个选项,并且无法直接在机器上放置.sh文件。
答案 0 :(得分:1)
sh -c
需要命令字符串作为参数。由于您正在从标准输入(通过heredoc)读取命令,因此您需要使用sh -s
选项:
ssh -t user@server.com sudo -u user2 sh -s << 'EOF'
cd /home
ls
dir=$(pwd)
echo "$dir"
echo "hello"
...
EOF
来自man sh
:
-c
string如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。
-s
如果存在-s选项,或者在选项处理后没有参数,则从标准输入读取命令。此选项允许在调用交互式shell时设置位置参数。
需要引用heredoc标记以防止父shell解释内容。