从我的所有测试来看,似乎不可能在允许交互式 shell 和传递参数的同时远程执行本地脚本。
交互的(参数尝试作为双引号内或外的单独命令运行)
ssh -t server "$(<${scriptname})"
参数(当然不是交互式的)
cat $scriptname | ssh -t server bash -s - "${args[@]}"
我确实尝试了所有方法。是否可以启动交互式 shell 并执行脚本,同时发送参数?
答案1
我相信通过考虑将远程 $@ 参数的值更改为本地传递的值,我已经回答了我自己的问题,并且它在我的测试中似乎有效。
这是我最终的解决方案,只需替换 $1 和 $2
本地脚本
#!/bin/bash
echo "I wanna read you $1 and $2"
read yn
if [ "$yn" == "y" ]; then
echo "I read you"
else
echo "I could not read you"
fi
命令
ssh -t $server "set -- "${@:1:2}"; $(<${script})"
结果 (当发送 test1 和 test2 作为参数时)
I wanna read you test1 and test2
y
I read you!
希望这对未来的访客有所帮助
答案2
作为一个学术问题,我相信如果你是 shell 转义和参数扩展方面的专家,你一定可以做到。但我不推荐这样做。
从实际情况来看,我确实这样做了:
scp 脚本.sh 我@服务器; ssh 我@服务器“./script.sh”
很经常。
如果你想通过 ssh 远程完成实际工作,你应该研究一下ansible