linux shellスクリプト起動マルチターミナル実行コマンドsshリモート実行コマンドを含む


プロジェクトの必要性、起動するスクリプトが多すぎて、最適化を行う必要があります.主にマルチターミナルrosの起動を含む.
直接shellコード
gnome-terminal --title="roscore" -x bash -c "roscore"

sleep 4s
gnome-terminal --title="ccm server" -x bash -c "cd ~/ccmslam_multi_ws;
source devel/setup.bash;
roslaunch ccmslam Server.launch;"
 
gnome-terminal --title="ccm rviz" -x bash -c "cd ~/ccmslam_multi_ws;
source devel/setup.bash;
cd ~/ccmslam_multi_ws/src/ccm_slam/cslam;
rviz -d conf/rviz/ccmslam.rviz;"
 


gnome-terminal --title="avs_listen" -x bash -c "cd ~/catkin_xavs_feature;
source devel/setup.bash;
echo 'avs_listen'
rosrun ros_xavs2 listen_stream;"


gnome-terminal --title="detection" -x bash -c "cd ~/detection_ws;
source devel/setup.bash;
roslaunch darknet_ros darknet_ros.launch;"

sleep 3s
gnome-terminal --title="avs_send" -x bash -c "bash ssh_avs.sh"
gnome-terminal --title="ccm_client1_robot16" -x bash -c "bash ssh_ccm_dadao16.sh"
gnome-terminal --title="ccm_client2_robot10" -x bash -c "bash ssh_ccm_dadao10.sh"



リモートsshのスクリプトが含まれています.sshがパスワードを入力しないように、sshpassパスパスをインストールします.sshpass -p password ssh user@ipの欠点:明文パスパスワードssh_ccm_dadao16.shは以下の通り
sshpass -p '.' ssh [email protected] "cd ccmslam_ws;
source /opt/ros/kinetic/setup.bash;
export ROS_MASTER_URI=http://192.168.3.6:11311;
export ROS_HOSTNAME=192.168.3.5;
source devel/setup.bash;
roslaunch ccmslam Client_dadao10_rgbd.launch;
"


このように起動プログラムはctrl+cが終了した後もプログラムが停止せず、バックグラウンドで実行されるため、手動でプロセスをクリーンアップする必要があります.ネット上にはプロセス番号を取得してkillするものがあります.ここでは簡単にプロセス名killを使用します.
sshpass -p '.' ssh [email protected] "bash clear_all.sh;
exit
"

sshpass -p '.' ssh [email protected] "bash clear_all.sh;
exit
"

sshpass -p '.' ssh [email protected] "bash clear_all.sh;
exit
"