Bash

Linux 命令不作為別名執行

  • March 26, 2018

我創建了一個命令來計算我們伺服器上每個使用者的會話數。這是:

who | awk '{ print $1}' | sort | uniq -c | sort

效果很好,但是當我將它移到伺服器上的別名中時,我只能得到who,

alias who_con="who | awk '{ print $1}' | sort | uniq -c | sort";

我認為它可能是雙引號,所以我嘗試使用單引號進行封裝,但我有相同的行為,

alias who_con='who | awk "{ print $1}" | sort | uniq -c | sort';

你需要逃避美元$1

$ alias wW="who | awk '{ print \$1}' | sort | uniq -c | sort"
$ wW
     1 tomasz

$1應該由 awk 擴展,而不是由 shell 擴展。如果沒有額外的轉義,它會被 shell 擴展。你需要多一層的逃避。這也可以:

$ alias who_con='who | awk "{ print \$1}" | sort | uniq -c | sort';
$ who_con
     1 tomasz

引用自:https://unix.stackexchange.com/questions/433683