Linux 命令不能用作别名

chr*_*s85 1 bash centos alias

我创建了一个命令来计算我们服务器上每个用户的会话数。这是:

who | awk '{ print $1}' | sort | uniq -c | sort
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我将其移动到服务器上的别名时,我只会得到who,

alias who_con="who | awk '{ print $1}' | sort | uniq -c | sort";
Run Code Online (Sandbox Code Playgroud)

我认为这可能是双引号,所以我尝试使用单引号进行封装,但我有相同的行为,

alias who_con='who | awk "{ print $1}" | sort | uniq -c | sort';
Run Code Online (Sandbox Code Playgroud)

小智 6

你需要逃避美元$1。

$ alias wW="who | awk '{ print \$1}' | sort | uniq -c | sort"
$ wW
      1 tomasz
Run Code Online (Sandbox Code Playgroud)

$1应该由 awk 扩展,而不是由 shell 扩展。如果没有额外的转义,它会被外壳扩展。你需要多一层逃生。这也将:

$ alias who_con='who | awk "{ print \$1}" | sort | uniq -c | sort';
$ who_con
      1 tomasz
Run Code Online (Sandbox Code Playgroud)