- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用于通过 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/
我尝试按照这些说明返回到前一个目录,但结果是“-bash CD:OLDPWD未设置”。。。我怎么能做我想做的事呢?。谢谢。
我认为在 IPython 中使用 ! 前缀的 shell 命令会使系统 shell 实际执行该命令,但似乎并非如此。考虑以下情况,我从 /home/Documents/Rx 开始,启动 IPython
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
有些 Live CD 可以启动操作系统并允许您无需安装即可使用它。 我想知道是否有一种简单的方法来自定义 Live CD,以便它只加载运行一个应用程序所需的内容,然后运行该应用程序。 最佳答案 对于
当我从 Live CD 启动 Linux Mint 时,我能够将文件保存到“文件系统”。但这些文件保存在哪里呢?不可能是光盘,因为它是 CDR。我不认为它存储在 RAM 中,因为它只能保存这么多数据,
创建了以下类,暂时没有接口(interface)/抽象类: 测试 - 用于创建测试数据 音乐 - 应存储所有 CD CD - 应存储艺术家和 CD 标题 + 所有歌曲 艺术家 - 仅包含字符串名称 歌
在 Git 提交和推送之后,Go 管道有时需要一段时间才能启动。即使在手动按下开始按钮后,也可能需要很长时间。有没有一种设置或方法可以让它更快地获取更改并更快地启动?我不介意它是否在服务器上使用更多资
这可能吗? 我的第一个猜测是: C:> Get-WmiObject Win32_CDROMDrive 但是当我尝试这个时,它只告诉我 Caption , Drive , Manufacturer ,
我正在运行 gitlab 作业,在作业中我试图取消设置在 CI/CD 设置中的某些变量。 例如,我有SOME_VARIABLE设置为 然后,在工作定义中,我正在尝试 variables: SOM
我遇到的问题是 cd不在窗口节点中工作: node("Window-node") { stage('unstash'){ echo
我尝试关注these instructions返回到上一个目录,但这会导致“-bash cd: OLDPWD not set”。 我怎样才能做我想做的事? 谢谢。 最佳答案 我也遇到了同样的问题。为
我在postgresql有点情况 我有两个表 t1 和 t2,并且都有一个列具有相同类型的数据“col_data”,col_data 可能只有以下数据 ('ab', 'cd', 'ab,cd', 'c
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我如何在 PowerShell 中编写函数或别名命令,以便 cd 可以做两件事: cd 给定的目录 ls 目录内容 编辑: 我需要的是这个: function ccd { param($pat
我有一个表格,其中填充了某些值,例如 | CODE | NAME | NB: THIS IS A VERY BASIC EXAMPLE | zygnc | oscar alpha |
所以表结构是这样的 CD id | Artist id 我想返回在此表中多次出现的艺术家,例如不止一张 CD。 我使用的是 Mysql,那么执行此操
This question already has answers here: Reference - What does this regex mean?
如果我们使用 cd bin,我们应该能够导航到 bin 文件夹。 那么bin目录前使用$的目的是什么?“cd $bin_dir” 请解释一下 最佳答案 $bin_dir 是环境变量(请阅读此处了解更多
我正在使用express generator 。运行生成器后,它输出以下内容: install dependencies: $ cd . && npm install cd .有什么意
我有一个旧程序可以从磁盘读取/翻录 CD/音乐数据。它是一个自定义程序,可以读取轨道数据并将其转换为 wma/wpa/wav 格式。然后用户输入如何获得许可,程序将数据和音乐文件提取到我们的 LAN。
我是一名优秀的程序员,十分优秀!