繁体   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