在bash中的.aliases文件中逐个执行命令

时间:2016-10-10 20:11:21

标签: bash shell alias

我想在bash中创建一个别名,如果我键入'logs',它应该带我到最新的日志文件。我的文件夹的结构是〜/ logs / date / time。谷歌搜索了一段时间后,我发现了下面的命令,如果我在bash提示符下输入它正常工作

cd ~/logs && cd `ls -tr | tail -1` && cd `ls -tr | tail -1`

但是,如果我添加.aliases并将其映射到'logs',那么它就无法按预期工作。它cd进入日志然后尝试cd进入我执行命令的最新文件/文件夹。 (例如。)如果我在FOLDER1并执行'logs',它 cd进入日志然后尝试cd进入FOLDER1中的最新文件夹。

已编辑:我的别名定义

alias logs="cd ~/logs && cd `ls -tr | tail -1` && cd `ls -tr | tail -1`"

任何想法为什么它表现得像这样&我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

问题是在定义别名时会立即评估反引号命令。

要么逃脱它们:

alias logs="cd ~/logs && cd \`ls -tr | tail -1\` && cd \`ls -tr | tail -1\`"

或单引用Charles所评论的表达式(你不能在这里使用env。变量):

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
}