在 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 并将其映射到 'logs',则它无法按预期工作。它 cd 到日志中,然后尝试 cd 到最新的 file/folder 我执行命令的地方。 (例如)如果我在 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(再次!)建议的那样更轻松地添加稳健性(在创建别名时,您只需快速和 hack 工作):

logs()
{ 
     cd ~/logs || return
     cd "`ls -tr | tail -1`" || return
     cd "`ls -tr | tail -1`" || return
}