cd命令失败时如何退出SFTP

时间:2013-05-24 20:28:39

标签: shell sftp exit-code

SFTP文件传输的Shell脚本已经编写并在AIX V6.1上正常运行。我正在使用SAP数据服务开发ETL,并开发真正的shell脚本。在单元测试期间,我为SFTP提供了不存在的目标文件夹,以模拟用户更改目标文件夹名称的情况,但是在命令 cd 并且返回退出代码0后它没有失败,尽管回显错误消息:无法规范化:失败。这使得ETL进程无法识别文件未被传输。当我在脚本中注入退出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之后,当远程目录拼写错误时返回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的帮助下,我实施了这个解决方案:捕获$?在命令/ 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 

谢谢大家!很棒的论坛!

1 个答案:

答案 0 :(得分:0)

首先,我假设您使用的是OpenSSH sftp

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

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

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

关于echo $?的测试:
你在哪里放echo $?命令?到您的SFTP脚本($INPUT_FILE)? sftp没有echo命令;它也无法解决$?

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

echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE
echo $?

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