使用参数以交互方式远程执行本地 bash 脚本

使用参数以交互方式远程执行本地 bash 脚本

从我的所有测试来看,似乎不可能在允许交互式 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

相关内容