加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash,stdout重定向命令,如scp

发布时间:2020-12-16 01:36:54 所属栏目:安全 来源:网络整理
导读:我有一个bash脚本,里面有一些scp命令. 它工作得很好但是,如果我尝试使用“./myscript.sh log”重定向我的标准输出,只有我的显式回声显示在“日志”文件中. scp输出缺失. if $C_SFTP; then scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"fi 好的,我
我有一个bash脚本,里面有一些scp命令.
它工作得很好但是,如果我尝试使用“./myscript.sh> log”重定向我的标准输出,只有我的显式回声显示在“日志”文件中.
scp输出缺失.
if $C_SFTP; then
   scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi

好的,我现在该怎么办?
谢谢

scp正在使用交互式终端来打印那个花哨的进度条.将输出打印到文件根本没有意义,因此scp会检测其输出何时重定向到终端以外的其他位置并禁用此输出.

但是,有意义的是将错误输出重定向到文件中,以防出现错误.如果需要,您可能想要禁用标准输出.

有两种可能的方法.首先是通过将stderr和stdout重定向到日志文件来调用脚本:

./myscript.sh >log 2>&1

其次,是告诉bash在你的脚本中执行此操作:

#!/bin/sh

exec 2>&1

if $C_SFTP; then
   scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi

...

如果您需要检查错误,只需验证$?执行scp命令后为0:

if $C_SFTP; then
   scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
   RET=$?
   if [ $RET -ne 0 ]; then
      echo SOS 2>&1
      exit $RET
   fi
fi

另一种选择是在脚本中设置-e,它告诉bash脚本在脚本中的一个命令失败后立即报告失败:

#!/bin/bash

set -e

...

希望能帮助到你.祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读