如何使用tty运行使用ssh执行命令的屏幕

时间:2012-11-24 16:24:17

标签: linux bash ssh gnu-screen

我今天尝试了很多东西让ssh启动一个执行命令的屏幕会话。目标是在远程计算机上运行命令,并能够查看输出并分离并重新附加后者。我希望在没有任何交互的情况下从脚本中执行此操作,除非将屏幕会话分离为关闭。到目前为止还没有令人满意的解

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[@]}";"

我遇到的一些问题与将命令传递给screen / ssh / bash的奇怪方法有关,这些方法干扰了参数和选项(我不太明白为什么他们不使用--来解释任何问题跟随带参数的命令)。以上版本几乎可以使用。剩下的困难是remotexe.sh(特别是make)中的命令显然错过.bashrc的导出和定义。这就是我尝试包含source ~/.bashrc的原因。我试图向remotexe.sh添加类似的命令或显式导出,但它的行为就好像是由/ bin / sh执行的。如果我执行传统的ssh登录,我可以立即运行remotexe.sh脚本而不会出错。我还尝试将shell -$SHELL添加到.screenrc

此解决方案的错误在哪里?我该如何纠正?

1 个答案:

答案 0 :(得分:0)

我根本没有对你的代码进行过测试,也不会保证这样做的完整性,但你肯定有一个引用错误。尝试:

ssh -t ${host} "
    source ~/.bashrc;
    echo done.;
    cd \"$exedir\" || exit 1;
    echo executing remotexe.sh ...;
    screen -S remotexe -t remotexe -R nice -n$prio ./remotexe.sh ${exeparams[@]};"