在 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
}
我想在 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
}