我有一个在机器上打开核心的脚本 它工作正常,但如果我增强它,就像没有核心 在机器上,我想告诉我,不只是踢出一个 错误命令。我想用某些东西替换错误 所以我试图找出最后一个命令的退出状态并以此为基础 如果声明的话。
#!/bin/bash
rc=$?
for i in server5432foo server5438foo server5344foo server5430foo;
do
echo $i ;
ssh -q -T $i " ls -ltr /local/data/log/core*; echo $? ";
echo $rc
if [[ $rc == 0 ]] ; then
ssh -q -T $i " chmod ugo+rw /local/data/log/core* ";
else
echo " No core files on $i /local/data/log/ "
fi
done
这是脚本返回的地方 指定文件中的核心。即使ls不成功,它仍然存在 返回0并且不运行else命令。
ls: cannot access /local/data/log/core*: No such file or directory
0
0
chmod: cannot access `/local/data/log/core*': No such file or directory
我正在尝试将commnand上的返回码发送到该盒子vias ssh。 在脚本中,似乎SSH成功,因此它返回零。 但是当我从shell运行命令时 - 如果不成功,我会得到一个非零的返回码。
casper@server0170foo:~/walt/restart_superprocesss$ ssh -q -T server5432foo "ls -ltr /local/data/log/core00001" ; echo $?
ls: cannot access /local/data/log/core00001: No such file or directory
2
casper@server0170foo:~/walt/restart_superprocesss$ ssh -q -T server5432foo "touch /local/data/log/core00001" ; echo $?
0
casper@server0170foo:~/walt/restart_superprocesss$ ssh -q -T server5432foo "ls -ltr /local/data/log/core00001" ; echo $?
-rw-r--r-- 1 casper casper 0 Oct 13 11:38 /local/data/log/core00001
0
为什么返回代码与我直接从命令行运行命令时有所不同,这些命令准确相反 从脚本运行命令 - 我每次都得到0
答案 0 :(得分:1)
我会尝试以下方法:
for i in server5432foo server5438foo server5344foo server5430foo; do
echo $i;
if ssh -q -T $i " ls -ltr /local/data/log/core* > /dev/null; then
ssh -q -T $i "chmod ugo+rw /local/data/log/core*"
else
echo "No core files on $i /local/data/log/"
fi
done
答案 1 :(得分:1)
如果你想检查ssh
的返回状态(应该是远程执行命令的返回状态或更高的数字表示ssh
本身失败),我认为你的错误脚本,并且您希望删除ssh
语句中的echo,因为它将以0退出(并且因为使用双引号,$?
将是ssh
之前的命令的返回值。 1}},而不是ls
)的返回值:
#!/bin/bash
# This line isn't really helpful
#rc=$?
for i in server5432foo server5438foo server5344foo server5430foo;
do
echo $i ;
ssh -q -T $i "ls -ltr /local/data/log/core*";
# This is the new line to make sure $rc has the ssh exit status
rc=$?
echo $rc
if [[ $rc == 0 ]] ; then
ssh -q -T $i "chmod ugo+rw /local/data/log/core*";
else
echo " No core files on $i /local/data/log/ "
fi
done
从手册页:
退出状态 ssh以远程命令的退出状态退出,如果发生错误则退出255.