我正在编写 bash 脚本echoo.sh
,目的是在执行命令之前回显命令。我源里面的脚本.bashrc
。但它不会影响我运行的其他 bash 脚本。下面是我到目前为止的代码:
回声
#!/usr/bin/env bash
shopt -s extdebug
get_hacked () {
[ -n "$COMP_LINE" ] && return # not needed for completion
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # not needed for prompt
local this_command=$BASH_COMMAND;
echo $this_command;
}
trap 'get_hacked' DEBUG
当我打开外壳并运行任何命令时 - 它有效。但对于脚本文件中的内容,它不起作用。
一些进一步的尝试:
- 我尝试
.bashrc
在测试脚本中获取文件 - 它不起作用。 - 我获取了
echoo.sh
测试脚本的内部内容并且它起作用了。
所以,我试图理解
.bashrc
如果我只是将脚本来源用于脚本中运行的内容,为什么它不起作用?- 当#2 有效时,为什么不进一步尝试#1 呢?
最后,我可以做什么,这样我就不必echoo.sh
在所有脚本文件中获取源代码来使其工作。我可以将我的脚本放在一个地方并更改一些设置以使其适用于所有场景吗?
答案1
我测试了你的所有尝试,它可以在 archlinux、bash 版本 4.4.12 上运行。但我必须打开一个新的交互式 shell,以便~/.bashrc
可以获取新的 shell。
对于非交互式 shell,您还可以尝试设置~/.bashenvrc
并export BASH_ENV=$(realpath ~/.bashenvrc)
在 中设置~/.bashrc
。
~/bashenvrc
现在,每次启动非交互式 shell 时都会获取该脚本。
我也测试了这个守护进程 1.7.7-1
干杯