web-dev-qa-db-ja.com

Ubuntu Raspberry Pi2のシェルスクリプト

私はRaspberryPi2用にUbuntuでシェルスクリプトを書いています。これが私のスクリプトです。

#!/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

このスクリプトにはいくつか問題があります。

  1. ソースコマンドを認識しません。
  2. Roslaunchを置いておくと、まだ多くの出力がログに記録され、次のコマンドを実行できませんでした。
  3. 新しいタブを開いて残りのスクリプトを別のタブで実行することを期待していましたが、実行されません。
2
SamTew

Steeldriverが指摘したように、#!/bin/shdashシェルを指し、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の内容を個別の項目として扱いたい場合、または個別の単語がない場合を除く)。

1