如何找到 bash 中提到这一点的位置

如何找到 bash 中提到这一点的位置

我删除了 rvm,但是现在每次我删除它时ls都会收到此消息:

-bash: /usr/local/rvm/scripts/initialize: No such file or directory

看起来它仍在从某个地方调用它,但似乎找不到从哪里调用它。我如何才能看到它在哪里被调用?

答案1

知道所调用文件的名称会使事情变得更容易。

创建文件/usr/local/rvm/scripts/initialize(您可能必须创建中间目录),并赋予其以下内容:

#!/bin/bash
exec >>/tmp/trace.log
echo $0 Invoked.
P=$$
while (( P > 1 )); do
  printf '%s %s\n' "$(stat -c%N /proc/$P/cwd)" "$(ps -p $P -ocmd=)"
  P=($(ps -p $P -oppid= ) ) || exit
done

使其可在全球范围内执行(chmod a+x /usr/local/rvm/scripts/initialize)。然后等待跟踪文件出现。它将包含树中每个进程的工作目录和命令行,从而initialize

答案2

在所有相关的 bash 脚本中,在 #!/bin/bash 后面添加“set -x”作为行可能会有所帮助。

您还可以尝试“strace”,因为它将显示系统调用,例如文件打开和 stderr/stdout。

答案3

检查你的 bash 初始化文件:

grep rvm ~/.bashrc ~/.profile ~/.bash_profile ~/.bash_login \ 
  /etc/bash.bashrc /etc/profile

您的目录下的某些文件$HOME可能不存在,这将向您显示有关没有此类文件的错误消息,但您可以放心地忽略它。

相关内容