我有一个脚本(在我的本地计算机上)。在脚本中,通过 ssh 与从机建立连接,并在从机上运行构建脚本:
ssh $user@$slave_ip bash $dest_root/$dest_dir/slave_run
有没有办法捕获从父脚本变量中的slave_run 脚本返回的退出代码?
答案1
您的命令(添加双引号):
ssh "$user@$slave_ip" bash "$dest_root/$dest_dir/slave_run"
$?
执行该命令后将捕获退出代码。
例子:
$ ssh someserver sh -c 'false'
$ echo $?
1
要捕获它:
$ ssh someserver somecommand
$ code=$?
或者,在服务器上获取命令以输出退出代码并将其捕获为字符串:
$ code=$( ssh server sh -c "somecommand; echo \$?" )
在你的情况下:
$ code=$( ssh "$user@$slave_ip" sh -c "$dest_root/$dest_dir/slave_run; echo \$?" )
有必要转义$
of,$?
因为命令位于双引号内,并且我们希望$?
由服务器端的 shell 进行评估,而不是由客户端的 shell 进行评估。
答案2
要检查退出代码,您需要检查一个特殊变量“$?”该变量告诉您最后运行的命令的退出代码。
ssh $user@$slave_ip 'bash $dest_root/$dest_dir/slave_run ; echo $?'