我今天尝试了很多事情,让ssh启动一个执行命令的屏幕会话。目标是在远程机器上运行命令,并能够看到输出并分离并重新附加后者。我想从脚本内部完成,除非将屏幕会话关闭。目前还没有令人满意的解如何运行屏幕执行一个命令通过ssh与tty
ssh -t ${host} "\
source ~/.bashrc; \
echo \"done.\"; \
cd \"$exedir\"; \
if [ \$? -ne 0 ]; then \
echo \"could not cd into directory\"; \
exit 1; \
fi; \
echo \"executing remotexe.sh ...\"; \
screen -S "remotexe" -t "remotexe" -R "nice -n$prio ./remotexe.sh ${exeparams[@]}";"
一些我遇到的都涉及到一种奇特的方式来传递与参数和选项干扰到屏幕/ SSH/bash的命令的问题(我不明白为什么他们不使用--
解释什么作为带有参数的命令)。上述版本几乎可以工作。剩下的难题是remotexe.sh中的命令(特别是make)显然错过了.bashrc
的输出和定义。这就是为什么我试图包括source ~/.bashrc
。我试图添加类似的命令或显式导出到remotexe.sh,但它的行为就好像它是由/ bin/sh执行的。如果我做传统的ssh登录,我可以立即运行remotexe.sh脚本而不会出错。我也尝试将shell -$SHELL
添加到我的.screenrc
。
该解决方案的错误在哪里?我该如何纠正它?
似乎有一些问题的'“'在最后一行尝试用引号将整个片断'''而不是'。”'来保存自己一些逃避头疼的转义。 – Thomas
然后字符串中的变量将不会被评估,对吧?我当然可以去掉字符串中的''' – highsciguy
请原谅我,然后反过来:使用'''将代码片段和'''包围其中的任何字符串。 – Thomas