下面是我的 shell 脚本片段,我在其中执行 scp 命令将文件从 machineB
复制到 machineA
。
for element in ${x[$key]}; do # no quotes here
printf "%s\t%s\n" "$key" "$element"
if [ $key -eq 0 ]
then
scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/.
fi
done
我有一个非常简单的问题,如下所述 -
如果我的 shell 脚本中的上述 scp 命令出于任何原因给我这个错误 - No such file or directory
然后我需要尝试从 machineC
执行 scp
并且对于那个 scp 命令将是这样的,只有机器会不同,其他一切都会相同 -
scp david@machineC:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/.
所以我的问题是如何在我的 shell 脚本中检查上述 scp 命令的输出,然后决定我是否需要从 machineC 调用 scp 命令?是否有任何状态类型的东西我可以用来检查,如果它由于某种原因失败了,那么我可以在 machineC 上调用 scp 命令吗?
这可以在 shell 脚本中完成吗?
最佳答案
给你:
for element in ${x[$key]}; do # no quotes here
printf "%s\t%s\n" "$key" "$element"
if [ $key -eq 0 ]
then
scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/. || scp david@machineB:/data/be_t1_snapshot/20131215/t1_$element_5.data /data01/primary/
fi
done
如果操作成功,则行为良好的命令将以“成功”(退出代码 = 0)退出,否则将以退出代码 != 0 退出。您可以像这样将命令链接在一起:
cmd && echo successful || echo failed
cmd && keep going || do something else
退出代码也存储在 $?
变量中,所以这是等价的:
cmd; if $? = 0; then echo successful; else echo failed; fi
不仅这是可能的,命令的状态代码在 shell 脚本中非常重要。考虑这两个例子:
./configure && make && make install
./configure; make; make install
如果全部成功,第一个将执行命令链。第二个命令将始终执行所有命令,即使之前的命令失败也是如此。
关于linux - 检查 scp 命令的状态代码,如果失败,则在另一台机器上调用 scp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20627207/