我有一个命令集作为这样的别名:
alias badalarm="cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l"
它给了我这个输出:
$ badalarm
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
input)
5
但是,如果我直接从 CLI 运行命令,我会得到:
$ cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
4
别名版本如何获取其他文件?当我使用
cat ~/sagLogs/* | grep 'failed to generate expected'
我得到这个输出:
[...]
Apr:09:09:31:01: >>>1 on all-t1sg0009 failed to generate expected 134
Apr:09:09:31:01: >>>2 on all-t1sg0009 failed to generate expected 107
Apr:09:09:31:01: >>>2 on all-t1sg0009 failed to generate expected 108
Apr:10:08:00:35: >>>1 on all-t1sg0009 failed to generate expected 133
Apr:10:08:00:35: >>>1 on all-t1sg0009 failed to generate expected 107
Binary file (standard input) matches
如何从我的别名中省略“标准输入”文件?
当您声明别名时,
$4
命令awk
中的 位于双引号内(因为整个别名字符串都在双引号内)。这意味着它将被 shell 扩展,很可能是一个空字符串。$4
在双引号内的单引号内并不重要。相反,请考虑使用 shell 函数,
这避免了任何引用问题。
我还稍微缩短了管道,并将直接输出到 TTY 替换为输出到标准输出(以便输出
tee
和wc -l
都发送到那里)。