0

我今天尝试了很多方法来让 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.

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

4

1 回答 1

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[@]};"
于 2012-11-24T16:43:02.683 回答