簡體   English   中英

在bash中的.aliases文件中一一執行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM