我正在 Ubuntu 中为 raspberry pi 2 编写 shell 脚本。这是我的脚本。
#!/bin/sh
source /home/ubuntu/ros_package/devel/setup.bash
roslaunch uvc_camera camera_node.launch &
#Open new tab
WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID
source /home/ubuntu/catkin_ws/devel/setup.bash
rosrun hybrid_tracking ir_track
这个脚本有几个问题:
- 它无法识别源命令。
- 当我将 & 放在 roslaunch 后面时,它仍然会记录大量输出,并且以下命令无法执行。
- 我希望打开一个新选项卡并在另一个选项卡中运行其余脚本,但是却不行。
答案1
正如steeldriver指出的,#!/bin/sh
指的是dash
壳,和dash
没有源命令。您可以将顶线改为#!/bin/bash
致电 ,bash
而不是dash
。
或者,您可以更改source
为.
,因此行将是. /home/ubuntu/ros_package/devel/setup.bash
。但是,您正在尝试获取bash
文件。这意味着,那里可能有不可移植的代码行,并且获取该文件可能会失败
因为roslaunch uvc_camera camera_node.launch &
您需要将其更改为,roslaunch uvc_camera camera_node.launch 2>&1 > /dev/null &
以便不显示该命令的输出。
还要注意,您应该用引号括住您的变量(如"$WID"
)以防止单词分裂(除非您确实希望$WID
将的内容视为单独的项目,或者那里没有单独的单词)。