Shell 脚本:将“CA”作为参数传递给 shell 函数时收到错误“cat:非法选项 -- A”,其他 2 个字母参数按预期工作

Shell 脚本:将“CA”作为参数传递给 shell 函数时收到错误“cat:非法选项 -- A”,其他 2 个字母参数按预期工作

一开始我认为这是一个奇怪的一次性故障,但现在我发现了第二个完全不同的 bash 函数,具有相同的行为,所以我寻求帮助,因为它让我发疯。

语境:我正在使用 ZSH 作为 shell 的 Mac 上工作。我有一些 shell 函数形式的帮助程序脚本,可以自动执行我经常做的一些事情。其中大多数都需要传递参数。该参数是 2 个字母的国家/地区代码(AU、CA、UK、DE 等)。它们中的大多数都工作得很好,但是有两个函数在CA作为参数传递时会失败。

错误:

cat: illegal option -- A
usage: cat [-belnstuv] [file ...]

测试时的注释适用于这两个函数:

  • 已确认的目录存在。
  • 所有其他国家/地区代码均有效(美国、英国、澳大利亚、德国、日本)。
  • 小写ca有效。
  • 其他以Awork 结尾的随机 2 个字母字符串。
  • 其他以 work 开头的随机 2 个字母字符串C
  • 使用 justA也可以,如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 函数按预期执行。

相关内容