我正在阅读bash手册,其中一节写道:
命令替换、用括号分组的命令和异步命令在与shell环境重复的子shell环境中调用
我的问题是,是否有一种方法可以让我看到在子there中执行了什么。例如,假设是我写了下面的一行。我需要做什么才能真正看到在子subshell中执行了什么?
$ printf "first\nsecond\nthird" | grep -E "(first|second)"我将如何检查在子shell中实际执行了什么(我怀疑它会执行grep表示"first“,然后执行第二个shell,表示" second ",但我只想看看它在做什么)。
发布于 2022-11-30 18:40:34
首先,我不确定grep高管是否处于两个子subshells中。
但是要检查执行命令时发生了什么,可以使用命令truss。类似于:
printf "first\nsecond\nthird" | truss -o out.log grep -E "(first|second)"将系统调用、信号等存储在out.log中。
这是手册页 of truss,供将来参考。
关于strace,我认为您可以在命令中替换它:
printf "first\nsecond\nthird" | strace -o out.log grep -E "(first|second)"但是要注意,与truss相比,输出将有所不同。
如果要跟踪整个shell、子shell创建、syscalls等,应该使用格式命令:
strace -o out.log 'printf "first\nsecond\nthird" | grep -E "(first|second)"'https://unix.stackexchange.com/questions/726858
复制相似问题