bash-v输出可以重定向吗?

bash-v输出可以重定向吗?,bash,Bash,使用-v选项启动bash会向控制台生成一个长输出 $ bash -v source ~/Dropbox/bin/tim_functions.sh \#!/bin/bash ...several hundred more lines 我想将输出捕获到一个文件中,以便于浏览,但我尝试了bash-v2>&1>out_bash.txt和bash-v | tee out_bash.txt,无法在文件中捕获终端屏幕上的信息。这就好像详细输出既不是stderr也不是stdout。这怎么可能 有人能提出一

使用-v选项启动bash会向控制台生成一个长输出

$ bash -v

source ~/Dropbox/bin/tim_functions.sh

\#!/bin/bash
...several hundred more lines
我想将输出捕获到一个文件中,以便于浏览,但我尝试了
bash-v2>&1>out_bash.txt
bash-v | tee out_bash.txt
,无法在文件中捕获终端屏幕上的信息。这就好像详细输出既不是stderr也不是stdout。这怎么可能


有人能提出一种捕获bash-v输出的方法吗?

您是否尝试过将您的孩子bash包装到子shell中

( bash -v ) 2>&1 > out_bash.txt

我四处摸索,发现了这个

在他们使用的网站上
bash-x test.sh2>&1 | tee out.test
,但我用
bash-v test.sh2>&1 | tee out.test
它运行良好

 bash -v 2>&1 > out_bash.txt
不是你想要的,应该是

 bash -v  >out_bash.txt 2>&1

在阅读了其他有用的答案之后,我认为这个问题与bash如何将详细信息发送给tty有关——这与stderr或stdout有些不同。可以通过以下方法解决此问题:

$ screen -L 
$ bash -v 
$ exit #from the bash session
$ exit #from the screen session
这将生成一个包含输出的screenlog.0文件

感兴趣的bash-v输出是在运行10.7.3(Lion)和

我试过的另一款10.6.8 mac的输出(有趣/冗长),尽管有一个类似的.bashrc文件。

您可以使用, bash-v 2>&1 | tee file.txt 或
bash-v 2>&1 | grep search_string

您还可以使用脚本中的exec命令重定向所有输出:

#!/bin/bash
exec >> out.txt 2>> out.txt
set -x
set -v
echo "testing debug of shell scripts"
ls

我试过你的建议,但运气不好--仍然无法捕捉信息。bash-v的输出似乎与调试信息有关。调试信息似乎既不是stderr也不是stdout。我开始认为它不能从终点站改道;发送到tty的任何内容都来自某个地方的
write()
调用(或等效调用)。可能发生的情况是交互式shell本身正在生成输出,而重定向可能只应用于派生的子进程。这就是为什么我认为包装一个层并提升重定向可能有效的原因。但是当您在一个bash会话中执行bash-v时,它会生成一个子进程(新的bash会话)。因此,除非父进程对子进程的调试信息进行write()调用,而不是调用write()的子进程本身,否则终端信息似乎应该是可重定向的。但可能这就是调试信息的生成方式——父进程以某种方式监视子进程的活动并报告它。$screen-L然后在screen会话中使用bash-v命令,然后使用exit终止bash会话,使用exit终止screen会话将生成一个screenlog.0文件,该文件具有输出。谢谢你的帮助。不过我正在做一些不同的事情——我只尝试运行'bash-v'而不是'bash-v some_script.sh'。运行bash-v提供了创建新shell子进程而不是创建运行脚本的新进程的调试信息。在我的例子中,似乎很难捕捉到调试信息。但我确实找到了一种方法——通过使用screen命令(见下面的注释)。谢谢你的帮助。
#!/bin/bash
exec >> out.txt 2>> out.txt
set -x
set -v
echo "testing debug of shell scripts"
ls