shell脚本ssh命令退出状态

Kas*_*ani 18 ssh shell

在shell脚本的循环中,我连接到各种服务器并运行一些命令.例如

#!/bin/bash
FILENAME=$1
cat $FILENAME | while read HOST
do
   0</dev/null ssh $HOST 'echo password| sudo -S 
   echo $HOST 
   echo $?      
   pwd
   echo $?'
done
Run Code Online (Sandbox Code Playgroud)

在这里我运行"echo $ HOST"和"pwd"命令,我通过"echo $?"获得退出状态.

我的问题是,我希望能够在一些变量中存储远程运行的命令的退出状态,然后(根据命令是否成功),将日志写入本地文件.

任何帮助和代码表示赞赏.

lar*_*sks 26

ssh将使用远程命令的退出代码退出.例如:

$ ssh localhost exit 10
$ echo $?
10
Run Code Online (Sandbox Code Playgroud)

所以在你的ssh命令退出后,你可以简单地检查一下$?.您需要确保不屏蔽返回值.例如,您的ssh命令完成:

echo $?
Run Code Online (Sandbox Code Playgroud)

这将始终返回0.你可能想要的是更像这样的东西:

while read HOST; do
  echo $HOST
  if ssh $HOST 'somecommand' < /dev/null; then
    echo SUCCESS
  else
    echo FAIL
done
Run Code Online (Sandbox Code Playgroud)

你也可以这样写:

while read HOST; do
  echo $HOST
  if ssh $HOST 'somecommand' < /dev/null
  if [ $? -eq 0 ]; then
    echo SUCCESS
  else
    echo FAIL
done
Run Code Online (Sandbox Code Playgroud)