首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子Subshell命令执行

子Subshell命令执行
EN

Unix & Linux用户
提问于 2022-11-30 17:54:22
回答 1查看 62关注 0票数 0

我正在阅读bash手册,其中一节写道:

命令替换、用括号分组的命令和异步命令在与shell环境重复的子shell环境中调用

我的问题是,是否有一种方法可以让我看到在子there中执行了什么。例如,假设是我写了下面的一行。我需要做什么才能真正看到在子subshell中执行了什么?

代码语言:javascript
复制
$ printf "first\nsecond\nthird" | grep -E "(first|second)"

我将如何检查在子shell中实际执行了什么(我怀疑它会执行grep表示"first“,然后执行第二个shell,表示" second ",但我只想看看它在做什么)。

EN

回答 1

Unix & Linux用户

发布于 2022-11-30 18:40:34

首先,我不确定grep高管是否处于两个子subshells中。

但是要检查执行命令时发生了什么,可以使用命令truss。类似于:

代码语言:javascript
复制
printf "first\nsecond\nthird" | truss -o out.log grep -E "(first|second)"

将系统调用、信号等存储在out.log中。

这是手册页 of truss,供将来参考。

关于strace,我认为您可以在命令中替换它:

代码语言:javascript
复制
printf "first\nsecond\nthird" | strace -o out.log grep -E "(first|second)"

但是要注意,与truss相比,输出将有所不同。

如果要跟踪整个shell、子shell创建、syscalls等,应该使用格式命令:

代码语言:javascript
复制
strace -o out.log 'printf "first\nsecond\nthird" | grep -E "(first|second)"'
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/726858

复制
相关文章

相似问题

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