
我得到了這一行來了解我的進程消耗了多少記憶體。
$ ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
現在我想為該命令創建一個別名,但遇到轉義'
字元的問題:
$ alias mm=ps -u $USER -o pid,rss,command | \
awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
bash: alias: -u: not found
bash: alias: myuser: not found
bash: alias: -o: not found
bash: alias: pid,rss,command: not found
Total 0 MB
我試圖轉義單引號,但仍然不起作用。
$ alias mm='ps -u $USER -o pid,rss,command | \
awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
>
您能幫我了解如何建立此別名嗎?
答案1
要使其成為別名(這是可能的),您需要在別名的整個值周圍使用雙引號。因此,您還需要轉義別名中的一些內容,並且需要轉義任何欄位參數,awk
因為當您設定別名時,這些參數也會被 Bash 解釋為參數。
這對我有用:
$ alias mm="ps -u $USER -o pid,rss,command | \
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}'"
在上面我做了以下事情:
別名值用雙引號引起來
alias mm="ps -u ...."
轉義 awk 的雙引號
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}
轉義 awk 的字段
awk '{print \$0}{sum+=\$2} END
我會用這個嗎?
可能不會,我會將其切換為 Bash 函數,因為它會更容易維護和理解正在發生的事情,但如果您仍然需要它,這裡是別名。
答案2
您能幫我了解如何建立此別名嗎?
如果您使用 bash,我可以建議您建立一個函數並將其放入 .bashrc 中嗎?
mm() {
ps -u "$USER" -o pid,rss,command |
awk '{print $0}{sum+=$2}
END {print "Total", sum/1024, "MB"}'
}
如果是bash
,則需要引用變數。在一個函數中,無需將所有內容都放在一行中。
答案3
這是轉義命令:
alias mm='ps -u $USER -o pid,rss,command | \
awk '\''{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'\'
shell 中轉義引號的範例:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
只要完成已開啟的一個 ( '
),放置轉義的一個 ( \'
),然後開啟另一個 ( '
) 即可。
或者:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
這是透過完成已開啟的一個 ( '
),將引號放入另一個引號 ( "'"
),然後開啟另一個 ( '
) 來完成的。
有關的:如何轉義單引號字串中的單引號?在 stackoverflow SE