我从以下位置获取了包装脚本“hhighlighter”https://github.com/paoloantinori/hhighlighter这会为 stdout 中的任何内容着色。我按照安装 ack-grep 的说明进行操作,在 ~/.bashrc 中为 ack=ack-grep 创建别名,将 h() 函数放入 ~/.bashrc 中,在终端中输入时一切正常。但是,当在 bash 脚本中输入完全相同的命令时,系统提示未找到命令。我将在这里举例说明...
root@kali:~# echo "abcd" | h a b c d
abcd
以下是我的脚本
#!/bin/bash
echo "abcd" | h a b c d
与输入的命令完全相同,但这是运行脚本时的输出
root@kali:~# ./test.sh
./test.sh: line 1: h: command not found
为什么直接在终端中输入时可以工作,而在 bash 脚本中输入完全相同的命令时却不行?
答案1
对我有帮助的解决方案是强制脚本以带有#!/bin/bash -i
标题的交互模式运行。
高级 Bash 脚本指南警告关于奇怪的后果:
请注意,这可能会导致脚本行为不稳定或即使没有错误也会显示错误消息。
然而我还没观察到类似的事情。
答案2
~/.bashrc
仅在交互式 bash 会话启动期间读取。
如果希望始终读取它,请将名称放在BASH_ENV
环境变量中:
export BASH_ENV=$HOME/.bashrc