如何调试bash提示符?

fny*_*fny 7 linux debugging bash

我一直在编辑.bashrc文件和其他初始化文件,似乎我留下了一些代码片段或两个在提示符处导致一些错误的代码片段(例如文件丢失),但我找不到它们.

如何调试提示以找出我不小心入侵的init脚本?

Ale*_*tch 9

大多数shell都有调试标志,显示正在执行的命令.Bash甚至可以在扩展变量之前和之后显示一个命令.您是否尝试过检查(我相信)-c -x或-X标志,看看它们是否显示您要查找的信息.

你可以将它们设置为rc文件中的第一个东西(大多数全局一个),或者通过从另一个shell调用它将它传递给bash命令.

实际上,如果从另一个shell调用bash,您还可以使用script命令记录您在文件中看到和执行的所有操作,这使得事后分析变得更加容易.


cho*_*ker 9

尝试使用-x标志调用bash,然后获取.bashrc或.bash_profile或您正在使用的任何内容.这应该足够长,以找到你的问题

即:

bash -x
source .bashrc
Run Code Online (Sandbox Code Playgroud)


Rob*_*obM 6

获得干净初始状态的最简单方法是通过 SSH 连接到您当前的主机,但不是让 SSH 使用默认设置启动您的 shell,而是提供一个显式命令来防止.bashrc被读取。

ssh -tt localhost /bin/bash --norc
Run Code Online (Sandbox Code Playgroud)

-tt强制ssh分配一个TTY,它是当你打开外壳连接东西通常会发生,但运行的明确命令时的默认。

--norc防止读你的设置文件(因为我们想要做的是我们自己)抨击。

您现在应该在一个干净的环境中的 bash 提示符下。这对于检查在.bashrc运行之前设置的变量很有用等。启用跟踪并获取您的.bashrc

set -x   # Enable tracing
source .bashrc
Run Code Online (Sandbox Code Playgroud)