首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将源命令中的stdout/stderr捕获/重定向到变量(在bash脚本中)?

在bash脚本中,可以使用重定向操作符将源命令的stdout和stderr捕获或重定向到变量。

要将stdout捕获到变量,可以使用命令替换的方式,将源命令用$()或``包裹起来,并将其赋值给一个变量。例如:

代码语言:txt
复制
output=$(command)

这样,源命令的stdout输出将被捕获到变量output中。

要将stderr捕获到变量,可以使用重定向操作符2>将stderr重定向到一个临时文件,然后再将该文件内容读取到变量中。例如:

代码语言:txt
复制
error=$(command 2>/tmp/error.log && cat /tmp/error.log)

这样,源命令的stderr输出将被重定向到/tmp/error.log文件中,并通过cat命令将文件内容读取到变量error中。

如果希望同时捕获stdout和stderr到不同的变量,可以使用管道操作符|将stdout和stderr分别重定向到不同的变量。例如:

代码语言:txt
复制
output=$(command 2>&1 >/dev/null)
error=$(command 2>/dev/null)

这样,源命令的stdout输出将被捕获到变量output中,stderr输出将被捕获到变量error中。

需要注意的是,重定向操作符>用于将stdout重定向到文件,2>用于将stderr重定向到文件,2>&1用于将stderr重定向到stdout。>/dev/null和2>/dev/null用于将输出丢弃,不保存到文件或变量中。

以上是将源命令中的stdout/stderr捕获/重定向到变量的方法。在实际应用中,可以根据具体需求选择适合的方式进行处理。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生无服务器函数计算服务):https://cloud.tencent.com/product/scf
  • 腾讯云云服务器(云计算基础设施):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(云计算存储服务):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI开放平台):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(物联网开发平台):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动应用开发平台):https://cloud.tencent.com/product/mad
  • 腾讯云数据库(云数据库服务):https://cloud.tencent.com/product/cdb
  • 腾讯云区块链(区块链服务平台):https://cloud.tencent.com/product/baas
  • 腾讯云音视频(音视频处理与分发服务):https://cloud.tencent.com/product/vod
  • 腾讯云安全(云安全服务):https://cloud.tencent.com/product/safe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Bash命令展开单引号内变量

问题 我想从一个 bash 脚本运行一个包含单引号且单引号内有其他命令和一个变量命令。 例如:repo forall -c '.......$variable' 在这种格式,美元符号 $ 被转义,变量没有被展开。 我尝试了以下几种变化形式,但它们都被拒绝了: repo forall -c '...."...$variable "'" 如果我将变量值直接替换进去,命令就能正常执行。 请告诉我哪里出了错。 回答 单引号内,所有内容都会被原样保留,无一例外。...不要拼接由 Shell 解析字符串 你应绝对避免通过拼接变量来构建 Shell 命令。这和 SQL 片段拼接(导致 SQL 注入)一样是个坏主意!...通常情况下,可以命令设置占位符,并将命令变量一起提供,以便调用者能从调用参数列表接收它们 例如,以下做法非常不安全。

8810

linux shell指令大全整理

linux shell指令 shell是一种脚本语言, 需要有编译器执行 bash是linux下默认shell sh是unix下默认shell ubuntubash和sh都可用 执行.../test.sh 变量类型 局部变量 脚本定义, 仅在当前shell中有效, 其他shell不能访问 环境变量 所有程序, 包括shell启动程序, 都能访问环境变量, c通过system()...而且用了let命令,let 命令BASH 中用于计算工具,用于执行一个或多个表达式,变量计算不需要加上 $ 来表示变量 #!...标准错误文件(stderr):stderr文件描述符为2,Unix程序会向stderr写入错误信息。...如果希望stderr重定向file, 可以这样写, >前加2 command 2>file 标准错误文件 stdoutstderr 合并后重定向 file command > file 2>

1.6K50

Shell脚本攻略04-玩转文件描述符及重定向

理论知识 在编写脚本时候会频繁使用标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。 通过内容过滤将输出重定向文件是我们平日里基本任务之一。...退出状态可以从特殊变量$?获得. (命令执行之后立刻运行echo $?,就可以打印出退出状态)。 [root@entel1 Templates]# cat cmdRW.sh #!...和stdout重定向同一个文件 还可以利用下面这个更好方法将stderr转换成stdout,使得stderrstdout 都被重定向同一个文件 $ cmd >output.txt 2...: pwd2: command not found ---- 将stderr输出重定向 /dev/null 有时候,输出可能包含一些不必要信息(比如调试信息)。...考虑一个特殊情况:文本就位于shell脚本。 一个实用例子是向log文件写入头部数据,可以按照下面的方法完成: #!

85610

Shell脚本学习3

,0表示成功,其他值表示失败 如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数计算结果,脚本需要时候访问这个变量来获得函数返回值。...标准错误文件(stderr):stderr文件描述符为2,Unix程序会向stderr写入错误信息。...command 2 > file # stderr 重定向 file command 2 >> file #stderr 追加到 file 文件末尾 command > file 2>&1 # stdout...和 stderr 合并后重定向 file command file2 # stdin 和 stdout重定向 全部可用重定向命令列表: 命令 说明 command > file...屏蔽 stdoutstderr: command > /dev/null 2>&1 Shell文件包含 Shell 也可以包含外部脚本,将外部脚本内容合并到当前脚本

22920

《Linux命令行与shell脚本编程大全》第十六章 控制脚本

16.1.3 捕获信号 也可以不忽略信号,信号出现时捕获它们并执行相应命令。 trap命令允许你来指定脚本要监看并从shell拦截linux信号。...16.1.5 修改或移除捕获 脚本不同位置进行不同捕获处理,需要重新使用带有新选项trap命令。 修改了信号捕获后,脚本处理信号方式就会发生变化。 也可以删除以及设置好捕获。...注意:后台进程运行时,任然会使用终端显示器来显示STDOUTSTDERR消息。 所以可以将后台运行程序STDOUTSTDERR进行重定向。...这样终端退出时脚本也不会退出。 命令格式: $nohup ./test & nohup会自动将STDOUTSTDERR消息重定向一个名为nohup.out文件。...如果没有关联电子邮件就无法获得输出,所以最好在脚本STDERRSTDOUT进行重定向 at-M选项用来屏蔽作业产生输出信息。 例子:就是重定向例子。这里不写了。 3.

3K61

Linux如何在Bash中将标准错误stderr重定向stdout标准输出

命令输出重定向文件或将其通过管道传递另一个命令时,你可能会注意错误消息已打印屏幕上。 Bash和其他Linux Shell,执行程序时,它使用三个标准I/O流。...例如,以下两个命令是相同;两者都会将命令输出(stdout重定向文件。...重定向stdout 将程序输出保存到文件时,通常会将stderr重定向stdout,以便将所有内容都保存在一个文件。...要将stderr重定向stdout并将错误消息发送到与标准输出相同文件,请使用以下命令: command > file 2>&1 > file将stdout重定向file,2>&1将stderr重定向...Bash,&>与2>&1含义相同: command &> file 结论 命令行上工作时,了解重定向和文件描述符概念非常重要。

3.4K20

3分钟阅读 | 最难用 Bash ,最常用输入输出重定向

引言 将命令输出重定向文件,或将其通过管道传递另一个命令时,你可能会注意错误消息会被打印屏幕上。 ? Bash和其他Linux Shell,执行程序时,它使用三个标准 I/O 流。...默认情况下,输入流和错误流都打印屏幕上。 重定向输出 重定向是一种捕获程序输出并将其作为输入发送到另一个程序或文件方法。 可以使用n>运算符重定向流,其中n为文件描述符号。...例如,以下两个命令是相同;两者都会将命令输出(stdout重定向文件。...stdout 将程序输出保存到文件时,重定向stderr stdout很常见,因此你可以将所有内容都保存在一个文件。...Bash&>具有以下含义2>&1: command &> file 写在最后 命令行上工作时,了解重定向和文件描述符概念非常重要。

88210

《Linux命令行与shell脚本编程大全》第十五章 呈现数据

>>  表示追加到文件 注意:用了输出重定向,shell并未将错误消息重定向输出重定向文件。错误消息仍会显示显示器。 3.STDERR 标准错误(2) STDERR文件描述符来处理错误消息。...shell或shell运行程序和脚本出错时生成错误消息都会发送到这个位置。 默认情况下STROUT和STDERR指向同样地方(显示器)。但是STDERR不会随着STDOUT重定向而发生改变。...15.2 脚本重定向输出 有两种方法: 1)临时重定向行输出 2)永久重定向脚本所有命令 15.2.1 临时重定向 可以单独将一行重定向STDERR。...15.3 脚本重定向输入 exec 命令允许你将STDIN重定向Linux系统上文件。 例子:查看test2数据   1 #!...>> 将cat命令输出追加到由$outfile变量指定文件。 cat命令输入不在取自标准输入,而是被重定向脚本存储数据。 EOF符号标记了追加到文件数据起止。

1.3K60

shell极简教程(二)

如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数计算结果,脚本需要时候访问这个变量来获得函数返回值。=   先来看一个例子: #!...默认情况下,command > file 将 stdout 重定向 file,command < file 将stdin 重定向 file。   ...如果希望将 stdoutstderr 合并后重定向 file,可以这样写: $command > file 2>&1   或 $command >> file 2>&1   如果希望对 stdin...和 stdout重定向,可以这样写: $command file2   command 命令将 stdin 重定向 file1,将 stdout 重定向 file2。...如果希望屏蔽 stdoutstderr,可以这样写: $ command > /dev/null 2>&1 十六,文件包含 像其他语言一样,Shell 也可以包含外部脚本,将外部脚本内容合并到当前脚本

5.3K70

【知识总结】Shell脚本编程入门

变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量脚本命令定义,仅在当前shell实例中有效,其他shell启动程序不能访问局部变量。...2.9 Linux let 命令 命令:let let 命令BASH 中用于计算工具,用于执行一个或多个表达式,变量计算不需要加上 $ 来表示变量。...默认情况下,command > file 将 stdout 重定向 file,command < file 将stdin 重定向 file。...如果希望将 stdoutstderr 合并后重定向 file,可以这样写: $ command > file 2>&1 或者 $ command >> file 2>&1 如果希望对 stdin...和 stdout重定向,可以这样写: $ command file2 command 命令将 stdin 重定向 file1,将 stdout 重定向 file2。

3.4K20

python crontab 坑

输出 要将crontab命令输出记录到日志文件,可以使用重定向,不仅要重定向stdout也要重定向stderr,因为Python解释器会将异常输出到stderr。...示例: $HOME/path/to/script > $HOME/log/file 2>&1 & 环境变量 crontab会以用户身份执行配置命令,但是不会加载用户环境变量,crontab会设置几个默认环境变量...我们往往会在.bash_profile文件定义一些全局环境变量,但是crontab执行时并不会加载这个文件,所以你shell中正常执行程序,放到crontab里就不行了,很可能就是因为找不到环境变量了...要解决这个问题只能是自己加载环境变量了,可以shell脚本添加source $HOME/.bash_profile,或者直接添加到crontab。...解决方法: 方法一:程序可能输出中文字符串都加上encode('utf-8'); 方法二:crontab中加上PYTHONIOENCODING=utf-8,将Pythonstdout/stderr

99110

解决paramiko执行命令超时问题

摘录原文: paramiko远程执行后台脚本“阻塞”问题 我写远程命令通道上线之后,发现在远程脚本后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。...②、发起远程执行 本地执行 python test.py,会发现整个脚本不会立即打印run ok,而是等30s之后才打印包括test.sh所有输出信息。...2、解决办法 将远程脚本标准输出stdout重定向错误输出stderr即可,test.py 修改如下: import paramiko client = paramiko.SSHClient() client...其实原因很简单,因为bash /tmp/test.sh & 虽然是后台执行,但是依然会产生标准输出,一旦产生标准输出,paramiko就会认为命令还未执行完成,且stdoutbuffer大于stderr...这里只要将脚本执行标准输出重定向错误输出(1 &2),然后paramiko就可以使用stderr快速读取远程打屏信息了。

3.7K20

shell入门第十讲

命令shell文本输出是通过 标准输出 (标准输出)流,stdout就是标准输出流之意(也称为输出重定向),来自命令错误消息通过发送 标准错误 (标准错误)流,比如stderr就是标准错误流之意...那么Linux标准流stdoutstderr也同样如此。如果我们使用了Linux标准流功能,当我们执行一个命令成功后,那么终端打印信息也将会被传送至stdout。...当我们执行命令失败后,那么终端打印报错信息也将会被传送至stderr。 1.1、stdout 输出重定向我们一般使用 >来表示,比如将信息输出重定向一个文件。...1.4、追加信息输出重定向 我们上面的stdoutstderr只是将信息输出到一个文件,如果再次重定向输出的话,文件之前内容将会被覆盖掉,只会写入最新内容文件,比如: bash [root@...: 'cat' bash: catt: 未找到命令… ## 这是新错误信息 相似命令是: 'cat' 1.5、同时进行标准输出和错误输出至文件 企业往往是这么干,写一个脚本,包含很多命令,那么我们需要将打印服务信息命令写上

86520

Python Subprocess库详解

=output_file) print(result.returncode) 在这个例子,标准错误输出被重定向名为output.txt文件。...子进程信号处理 Subprocess库还允许你父进程处理子进程信号,例如在父进程捕获子进程Ctrl+C信号。..., stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) 在这个例子,subprocess.DEVNULL将子进程标准输出和标准错误输出都重定向空设备...使用subprocess.Popenstdoutstderr参数进行输出流重定向 subprocess.Popenstdoutstderr参数允许你将子进程标准输出和标准错误输出重定向文件或其他地方...) 在这个例子stdout参数被设置为一个打开文件对象,将ls -l命令标准输出写入文件,而stderr参数被设置为subprocess.PIPE,以便捕获标准错误输出。

1.6K21

shell脚本还能这么写?

变量替换 平常开发脚本会依赖很多配置,例如监听端口、配置文件之类可变参数,如果我们将其硬编码脚本,那么改起来就是牵一发动全身了,很麻烦,不可靠。.../bin/bash # set命令奇妙用途留在文章末尾 set -eu # nginx配置文件不同环境,位置可能不同,所以需要将其抽离成可配置变量脚本来引用 NGINX_CONFIG_FILE=.../bin/bash # set命令奇妙用途留在文章末尾 set -eu # nginx配置文件不同环境,位置可能不同,所以需要将其抽离成可配置变量脚本来引用 NGINX_CONFIG_FILE=...,需要两条命令一定条件下,一起执行,类似于事务概念,这就要通过()来实现,括号命令将会新开一个子shell顺序执行,所以括号变量不能够被脚本余下部分使用。...重定向stdout 脚本开发过程我们使用管道时,默认只是传递stdout某种场景下,比如需要根据stderr内容进行判断,默认情况下就不支持,需要我们进行特殊处理,stderr重定向stdout

1.4K20
领券