gpt4 book ai didi

shell - cd命令失败时如何退出SFTP

转载 作者:行者123 更新时间:2023-12-01 16:43:51 25 4
gpt4 key购买 nike

用于通过 SFTP 进行文件传输的 Shell 脚本已经编写完成,并且可以在 AIX 6.1 版上正常运行。我正在使用 SAP 数据服务开发 ETL,并且是 shell 脚本的真正新手。在单元测试期间,我为 SFTP 提供了不存在的目标文件夹,以模拟用户更改目标文件夹名称的情况,但在命令 cd 后它并没有失败并返回退出代码 0,尽管回显错误消息:无法规范化:失败。这使得 ETL 过程不知道文件未传输。当我在脚本中注入(inject) exit 1 时,ETL 作业捕获到 SFTP 故障并自行失败,这是预期的行为。

我的问题是:如何调整现有的 shell 脚本调用 SFTP 命令以使用代码 1 退出?

这是脚本的摘录:

'#!/bin/sh

....

echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE

echo put $TARGET_LOCAL_DIR$TARGET_FILE_NAME>>$INPUT_FILE

echo quit>>$INPUT_FILE

/usr/bin/sftp -b $INPUT_FILE $USER@$HOSTNAME

echo $? 命令 cd 之后的变量,当 remote dir 拼写错误时返回 0。我在想的可能是在命令 cd 之后在线检查是否存在错误消息,如果其长度不为 0,则以代码 1 退出。

类似伪代码的东西:

error_msg = get_error_msg({cd $TARGET_REMOTE_DIR>>$INPUT_FILE})

if length(trim(error_msg)) <> 0 then
echo “Cannot change directory! Aborting…”

exit 1

fi

如有任何意见,我们将不胜感激。

干杯!

在 Martin 的大力帮助下,我实现了这个解决方案:Catching $?命令/usr/bin/sftp 后立即返回代码并强制退出并捕获错误!

/usr/bin/sftp -b $INPUT_FILE $USER@$HOSTNAME

if [[ $? -ne 0 ]]; then
" SFTP Error while accessing remote target directory! Error message"
exit $?
fi

谢谢大家!很棒的论坛!

最佳答案

首先,我假设您正在使用 OpenSSH sftp

cd 命令失败时,OpenSSH sftp 确实会中止脚本并以 1 退出。

所以您的问题可能不在于 SFTP 脚本,而在于您捕获退出代码的方式。

如果您分享详细信息,如何捕获退出代码,您可能会得到更具体的答案。

至于你用 echo $? 进行的测试:
你把 echo $? 命令放在哪里?到您的 SFTP 脚本 ($INPUT_FILE)? sftp 没有 echo 命令;而且它也无法解析 $?

如果你像这样把它放到 shell 脚本中:

echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE
echo $?

它不做,你想要什么。您在这里只是查询先前的 echo 命令的结果,这不太可能会失败。

关于shell - cd命令失败时如何退出SFTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743136/

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