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

如何将STDERR捕获到bash变量中而不影响STDOUT?

要将STDERR捕获到bash变量中而不影响STDOUT,可以使用重定向和命令替换的方式实现。

在bash中,可以使用重定向符号"2>"将STDERR重定向到一个临时文件中,然后使用命令替换将该临时文件的内容赋值给一个变量。

下面是具体的步骤:

  1. 创建一个临时文件,用于存储STDERR的输出:temp_file=$(mktemp)
  2. 将STDERR重定向到临时文件中:command 2> "$temp_file"

其中,"command"是需要执行的命令,可以是任何产生错误输出的命令。

  1. 将临时文件的内容赋值给一个变量:error_output=$(< "$temp_file")
  2. 删除临时文件:rm "$temp_file"

现在,错误输出已经被捕获到了变量"error_output"中,而标准输出仍然会显示在终端上。

这种方法适用于需要在脚本中捕获错误输出并进行处理的情况,例如错误日志记录、错误处理等。

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

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • shell十三问,为linux学习打基础(三)

    所谓山不转路转、路不转人转嘛,我们可以换一个思维:将stderr导进stdout或将stdout导进sterr,不是大家在抢同一份档案,不就行了﹗bingo﹗就是这样啦: 2>&1就是将stderr并进...(贪得无厌的家伙﹗)方法当然是有,而且你早已学过了﹗^_^ 我提示一下就好:请问你如何将stderr合并进stdout一同输出呢?...所谓tee命令是在不影响原本I/O的情况下,将stdout复制一份到档案去。...bash shell中常用的loop有如下三种:for while until for loop是从一个清单列表读进变量值,并“依次”的循环执行do到done之间的命令行。...第二行不在hard quote之内的$var会依次被替换为one two three four five。 4.当最后一个变量值处理完毕,循环结束。

    96760

    Pythonos.system()、subprocess.run()、call()、check_output()的用法

    , stderr: 用于指定标准IO文件句柄,可以是: subprocess.PIPE: 用作 stdout, stderr 参数的值时,可以从返回值对象stdoutstderr...属性读取输出内容 subprocess.STDOUT: 用作 stderr 参数的值时,相当于把标准错误重定向到标准输入) subprocess.DEVNULL: 用作 stdout,...、stderr 会以“文本”模式打开(返回值对象stdoutstderr 存储文本内容),否则返回值对象 stdoutstderr 存储的是字节序列env: 用于设置程序执行时继承的环境变量等..., ret.stdout) assert re.match("stderr output", ret.stderr) # 如果 cmd 的命令不存在,这里也是可以捕获到的,内容可能是 xxx...=None, stderr=None, shell=False, cwd=None, timeout=None)注意:这个方法的返回值是命令的退出码,不是一个对象,所以无法像 subprocess.run

    68620

    Linux的进程守护supervisor安装配置及使用

    systemctl start supervisord systemctl status supervisord # 重新加载配置文件,不影响正在运行的程序 systemctl reload supervisord...PHP_EOL; $i ++; sleep(5); } PHP 在程序配置文件夹/etc/supervisord.d添加test.ini: [program:test] directory...=true ; redirect proc stderr to stdout (default false) ;stdout_logfile=/a/path ; stdout log path...50MB) ;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) ;stdout_capture_maxbytes...更多高级功能请参考supervisor官网使用手册:传送门 总结 以上所述是小编给大家介绍的Linux的进程守护supervisor安装配置及使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的

    1.2K21

    python模块之subprocess类与常量

    stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 在一个新的进程执行子程序...除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程的程序执行。...如果指定了env,就必须提供程序执行依赖的所有环境变量 encoding/errors/text/universal_newlines:stdin/stdout/stderr默认以二进制模式打开。...返回(stdout_data, stderr_data)形式的元组,元组类型是string或byte。...属性 cmd:指令 timeout:秒为单位的时间 output:run()或check_output()函数捕获到的子进程的输出,否则为None stdout:output属性别名 stderr:run

    2.5K10

    一起来学shell bash编程(2)

    一起来学shell bash编程(1) 回顾完之后,这次的推文主要学习如何在bash写更好的loops,还有一些更加高级的shell bash编程知识。事不宜迟,开始今天的学习。...有一个输入流( stdin)和两个输出流( stdoutstderr)。...通常命令的输出将进入标准输出( stdout),错误消息将变为标准错误( stderr)。 默认情况下,两者stdoutstderr都被定向到终端。...如何在bash操作文件路径? 通常,我们必须在bash操作文件名以删除其中的各个部分。也许我们想要删除目录名称,或者仅保留文件名,或者仅保留不带扩展名的文件名,或者删除扩展名等等。...=${FILE%.*}echo $CHOP 它将打印 /A/B/C.txt 现在只获取扩展名: FILE=/A/B/C.txt.gzCHOP=${FILE##*.}echo $CHO 它打印: gz 如何将动态命令转换为变量

    2K50

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

    按下Ctrl+C 和 自己运行退出都能被捕获到。 例子:   1 #!/bin/bash   2 trap " echo 'GoodBye everyone!!!'"...注意:后台进程运行时,任然会使用终端显示器来显示STDOUTSTDERR消息。 所以可以将后台运行的程序的STDOUTSTDERR进行重定向。.../test & nohup会自动将STDOUTSTDERR的消息重定向到一个名为nohup.out的文件。 如果在同一个目录运行两次,第二次会追加到nohup.out。...2.获取作业的输出 显示器不会关联到该作业,取而代之的是linux将提交该作业的用户的电子邮件地址作为STDOUTSTDERR。任何标准输出和标准错误都会通过邮件发送给用户。...如果没有关联电子邮件就无法获得输出,所以最好在脚本STDERRSTDOUT进行重定向 at的-M选项用来屏蔽作业产生的输出信息。 例子:就是重定向的例子。这里不写了。 3.

    3K61

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

    最常见的文件描述符是stdin、 stdoutstderr。 我们甚至可以将某个文件描述符的内容重定向到另一个文件描述符。 下面给出一些对文件描述符进行操作和重定向的例子。...退出状态可以从特殊变量$?获得. (在命令执行之后立刻运行echo $?,就可以打印出退出状态)。 [root@entel1 Templates]# cat cmdRW.sh #!...,不是文件(而且因为并没有stdout的输出,所以out.txt没有内容): [root@entel1 Templates]# ls + > out.txt ls: cannot access +:...和stdout重定向到同一个文件 还可以利用下面这个更好的方法将stderr转换成stdout,使得stderrstdout 都被重定向到同一个文件 $ cmd >output.txt 2...这是因为这些 信息属于stderrtee只能从stdin读取。 ---- 使用stdin作为命令参数。只需要将-作为命令的文件名参数即可 我们可以使用stdin作为命令参数。

    86410

    nodejs写bash脚本终极方案!

    ◆ 前言 最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义的变量shell变量没有定义,仍然是可以使用的,但是它的结果可能不是你所预期的。...; } console.log(`stdout: ${stdout}`); }); 这里需要注意的是,首先exec是异步的,但是我们bash脚本命令很多都是同步的。...注意: __filename & __dirname这两个变量是在commonjs的。我们用的是.mjs结尾的es6 模块。...在ESM模块,Node.js 不提供__filename和 __dirname 全局变量。...由于此类全局变量在脚本中非常方便,因此 zx 提供了这些以在 .mjs 文件中使用(当使用 zx 可执行文件时) require也是commonjs的导入模块方法, 在 ESM 模块,没有定义 require

    3.9K20

    nodejs 写 bash 脚本终极方案!

    前言 最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义的变量shell变量没有定义,仍然是可以使用的,但是它的结果可能不是你所预期的。...; } console.log(`stdout: ${stdout}`); }); 复制代码 这里需要注意的是,首先exec是异步的,但是我们bash脚本命令很多都是同步的。...注意: __filename & __dirname这两个变量是在commonjs的。我们用的是.mjs结尾的es6 模块。...在ESM模块,Node.js 不提供__filename和 __dirname 全局变量。...由于此类全局变量在脚本中非常方便,因此 zx 提供了这些以在 .mjs 文件中使用(当使用 zx 可执行文件时) require也是commonjs的导入模块方法, 在 ESM 模块,没有定义 require

    2.5K20

    让Linux服务器后台执行任务

    并且这个终端也还是被占用了,不能干其他事,因此,上面这样并没有什么卵用 想起我们可能用 & 符号让当前任务在后台运行当前终端可以继续干其他的事,那么在这里道理也是一样的,我们可以写成下面这样 $ nohup...输出,因此,我们最好自己输出错误日志 首先我们再来回顾一下 Linux 的几个标准流,有 stdin , stdout , stderr ,分别用 0 , 1 , 2 表示,因此,我们可以通过标准流的重定向来将标准输出和标准错误重定向到自定义文件...,所以,下面这样子我们就可以捕获到每次的错误信息 $ nohup jupyter-notebook --ip 0.0.0.0 >out.log 2>err.log & 用下面这个也是可以的,将输出和错误信息都重定向到一个文件...( 2>&1 的意思是将 stderr 重定向到 stdout 如果不加 & 的话就会新建一个名为 1 的文件 ) $ nohup jupyter-notebook --ip 0.0.0.0 >jupyter.log.../bin/bash #根据进程名杀死进程 if [ $# -lt 1 ] then echo "缺少参数:procedure_name" exit 1 fi PROCESS=`ps -ef|

    1.8K20
    领券