![](/img/trans.png)
[英]Bash Script execute commands from a file but if cancel on to jump on next one
[英]Execute commands one by one in .aliases file in bash
我想在bash中創建一個別名,如果我鍵入“ logs”,它將帶我到最新的日志文件。 我的文件夾結構為〜/ logs / date / time。 谷歌搜索一段時間后,我發現了以下命令,如果我輸入bash提示,它工作正常
cd ~/logs && cd `ls -tr | tail -1` && cd `ls -tr | tail -1`
但是,如果我添加它.aliases並將其映射到“日志”,則它無法按預期工作。 它的cd進入日志,然后嘗試cd到我執行命令的最新文件/文件夾。 (例如)如果我在FOLDER1中並執行'logs',則將其CD到日志中,然后嘗試將CD插入FOLDER1中的最新文件夾。
編輯:我的別名定義
alias logs="cd ~/logs && cd `ls -tr | tail -1` && cd `ls -tr | tail -1`"
知道為什么它會這樣嗎?我該如何進行這項工作?
問題在於,定義別名時,會立即評估反引號命令。
要么逃脫它們:
alias logs="cd ~/logs && cd \`ls -tr | tail -1\` && cd \`ls -tr | tail -1\`"
或用單引號將查爾斯(Charles)注釋過的表達式括起來(您不能在此處使用環境變量):
alias logs='cd ~/logs && cd "`ls -tr | tail -1`" && cd "`ls -tr | tail -1`"'
或創建一個功能也更有效且更具可讀性的函數,因此您可以按照Charles(再次!)建議的那樣,更輕松地添加健壯性(創建別名時,您只需進行快速的修改即可):
logs()
{
cd ~/logs || return
cd "`ls -tr | tail -1`" || return
cd "`ls -tr | tail -1`" || return
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.