一开始我认为这是一个奇怪的一次性故障,但现在我发现了第二个完全不同的 bash 函数,具有相同的行为,所以我寻求帮助,因为它让我发疯。
语境:我正在使用 ZSH 作为 shell 的 Mac 上工作。我有一些 shell 函数形式的帮助程序脚本,可以自动执行我经常做的一些事情。其中大多数都需要传递参数。该参数是 2 个字母的国家/地区代码(AU、CA、UK、DE 等)。它们中的大多数都工作得很好,但是有两个函数在CA
作为参数传递时会失败。
错误:
cat: illegal option -- A
usage: cat [-belnstuv] [file ...]
测试时的注释适用于这两个函数:
- 已确认的目录存在。
- 所有其他国家/地区代码均有效(美国、英国、澳大利亚、德国、日本)。
- 小写
ca
有效。 - 其他以
A
work 结尾的随机 2 个字母字符串。 - 其他以 work 开头的随机 2 个字母字符串
C
。 - 使用 just
A
也可以,如taillog A
.
功能 1 失败,运行:taillog CA
function taillog() {
local grey="1;30"
local red="1;31"
local green="1;32"
local yellow="1;33"
local cyan="1;36"
tail -f /Users/myUser/Sites/Country-"$1"/logs/error.log \
| GREP_COLOR="$green" grep -E --color=always --line-buffered "(\[php7?:info\])|$" \
| GREP_COLOR="$cyan" grep -E --color=always --line-buffered "(\[php7?:notice\])|$" \
| GREP_COLOR="$yellow" grep -E --color=always --line-buffered "(\[php7?:warn\])|(?i:warn(ing))|$" \
| GREP_COLOR="$red" grep -E --color=always --line-buffered "(\[php7?:error\])|(?i:error(s))|(?i:fatal)|$" \
| GREP_COLOR="$grey" grep -E --color=always --line-buffered "(?i:debug)|$"
}
功能 2 失败,运行findChanged CA 600
function findChanged() {
find /Users/myUser/Sites/Country-"$1"/public/wp-content/plugins -type f -cmin -"$2" -not -path "*/\.git/*" | more
}
所有其他国家/地区代码均按预期工作。到底是什么CA
原因cat
引起抱怨呢?这让我抓狂。
答案1
事实证明,我的 ZSH 插件之一“common-aliases”正在注入全局别名 ,alias -g CA="2>&1 | cat -A"
导致 的任何输入CA
扩展为cat -A
。这就是造成我麻烦的原因。删除该行允许上面列出的 shell 函数按预期执行。