[英]Escaping a string with quotes in bash alias file
我想在我的~/.bash_aliases
文件中輸入以下命令:
grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
我嘗試將以下內容放入別名文件中:
alias unlocks=grep screen /var/log/auth.log|grep "$(date|awk '{print $2" "$3}')"
但我得到以下信息:
bash:別名:屏幕:找不到
bash:別名:/var/log/auth.log:找不到
大概是因為命令字符串中有空格,通常可以通過引用整個字符串來解決空格,但是我已經使用了兩種類型的引號,而且我無法弄清楚如何正確地對它們進行轉義。
請有人幫忙嗎?
不要試圖將復雜的東西作為別名。 而是在.bashrc
定義一個函數。
unlocks () {
grep screen /var/log/auth.log | grep "$(date +"%b %d")"
}
另外,當您可以直接調整date
的輸出時,請不要使用awk
。 但是,您可以使用awk
替換兩個grep
實例:
unlocks () {
awk -v date=$(date +"%b %d") '/screen/ && $0 ~ date' /var/log/auth.log
}
alias foo="my command with\\"quotes\\""
大多數情況下, alias foo="my command with\\"quotes\\""
應正常工作
編輯:由於bash
將評估字符串,因此您還需要轉義其他特殊字符,例如$
在您的情況下: alias unlock="grep screen /var/log/auth.log|grep \\"\\$(date|awk '{print \\$2\\" \\"\\$3}')\\""
應該可以解決問題。
有一個簡單的方法和一個困難的方法。
最簡單的方法:把代碼放到稱為腳本文件unlocks
里面的文件夾$HOME/bin
。 在大多數系統中,該文件夾被添加到路徑中。 使用chmod +x $HOME/bin/unlocks
使腳本可執行。
困難的方法:您可以使用嵌套的引號,但是它很難看,易碎,而且...我不建議這樣做。 但是,如果必須的話,它將如下所示:
alias unlocks='grep screen /var/log/auth.log|grep "$(date|awk '"'"'{print $2" "$3}'"'"')"'
要在單個帶引號的字符串中獲得單個嵌套的單引號,您需要'"'"'
第一個對號結束當前字符串。 "'"
為您提供單引號,shell將在其后附加當前字符串。 然后最后一個滴答聲繼續該字符串。
alias unlocks="..."
在這種情況下將不起作用,因為它將立即運行date|awk '{print $2" "$3}'
並將結果放入別名中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.