gpt4 book ai didi

linux - 检查 scp 命令的状态代码,如果失败,则在另一台机器上调用 scp

转载 作者:太空狗 更新时间:2023-10-29 11:09:24 36 4
gpt4 key购买 nike

下面是我的 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com