好的,有几个与这个类似的主题,但我想要做的是在远程计算机的屏幕会话中运行一个程序。
以我为榜样此主题
为了确保正确,我输入以下命令:
ssh [email protected] "screen -S test -d -m roslaunch startup startup_node"
它既不会启动新的屏幕会话“测试”,也不会运行我的脚本“roslaunch startup startup_node”
我可以创建一个远程会话“测试”:
ssh [email protected] "screen -S test -d -m"
但是我怎样才能在其中运行命令呢?该命令如何screen -X
与命名屏幕一起使用?
我已经尝试过,基于这:
ssh [email protected] "screen -X stuff "roslaunch startup startup_node^M" "
但同样,它似乎无法远程启动该过程。如果您已经通过 ssh 连接到远程,则这两个命令都有效。
我还尝试在我的远程机器上编写一个包含以下内容的脚本 startnav.sh, screen -S nav -d -m roslaunch startup startup_node
并通过以下方式运行它:
ssh [email protected] -t "./startnav.sh"
这将创建屏幕实例,但它已失效,如以下输出所示
~$ ssh [email protected] -t screen -r nav
There is a screen on:
4506.nav (04/06/15 12:30:09) (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be resumed matching nav.
Connection to 192.168.1.5 closed.
最后,我遵循了问题在这里
并且可以执行正常的 bash 命令,只是不能执行“roslaunch startup startup_node”
例如
ssh -f [email protected] "screen -dm -S nav htop "
将在远程机器上的单独屏幕中启动 htop 会话。该-f
标志似乎很重要。但对于 roslaunch 或包含 roslaunch 的脚本仍然不起作用,尽管它在没有 ssh 的情况下运行时确实有效。此外,对于临时程序(例如)sleep 10
,屏幕只会存在到该脚本执行完成为止。
答案1
就像问题中的最后一个示例一样,问题不在于 ssh 或 screen 环境,而是没有设置几个 ROS 特定的环境变量。这是因为~/.bashrc
没有在远程调用,所以远程调用会帮我设置它们。
一旦我包含了特定的环境变量的设置,即
source /ros/devel/setup.sh
系统运行正常。
脚本文件startnav.sh
:
#!/bin/bash
source ~/ros_ws/devel/setup.sh
roslaunch startup startup_node.launch
并调用加载脚本文件:
ssh [email protected] -f "screen -S nav -dm ./startnav.sh"