首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向zenity的Bash使用

重定向zenity的Bash使用
EN

Stack Overflow用户
提问于 2022-02-14 02:00:36
回答 1查看 123关注 0票数 0

为了创建更易于管理的脚本,只将自己的输出写到一个位置本身(通过'exec > file'),是否有比下面更好的解决方案来组合stdout重定向+ zenity (在这种使用中依赖管道的stdout)?

parent.sh:

代码语言:javascript
复制
#!/bin/bash
    
exec >> /var/log/parent.out
    
( true; sh child.sh ) | zenity --progress --pulsate --auto-close --text='Executing child.sh')
[[ "$?" != "0" ]] && exit 1

...

child.sh:

代码语言:javascript
复制
#!/bin/bash

exec >> /var/log/child.out

echo 'Now doing child.sh things..'
...

当你做这样的事情时-

代码语言:javascript
复制
sh child.sh | zenity --progress --pulsate --auto-close --text='Executing child.sh'

zenity从不从child.sh接收stdout,因为它是从child.sh内部重定向的。尽管这似乎有点麻烦,但使用包含“真”+执行child.sh的子subshell是否可以接受?还是有更好的方法来管理标准输出?

我知道在这个场景中使用“tee”是可以接受的,不过我不希望每次执行child.sh时都要写出would . in的日志文件位置。

EN

回答 1

Stack Overflow用户

发布于 2022-05-23 04:34:06

您的重定向exec > stdout.txt将导致错误。

代码语言:javascript
复制
$ exec > stdout.txt
$ echo hello
$ cat stdout.txt
cat: stdout.txt: input file is output file

您需要一个中间文件描述符。

代码语言:javascript
复制
$ exec 3> stdout.txt
$ echo hello >&3
$ cat stdout.txt
hello
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71106437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档