首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >别名转到文件夹中的最新文件夹

别名转到文件夹中的最新文件夹
EN

Ask Ubuntu用户
提问于 2020-07-27 12:30:25
回答 3查看 1.4K关注 0票数 14

我们将机器人的结果创建到不同的文件夹中,格式为“结果-yyyy dd-hh-mm-ss”,目前我的bash_aliases中有这样的结果。

代码语言:javascript
复制
alias res="VAR=$(ls --directory /path/to/results/res* | tail -n 1); cd $" 

它曾经很好..。然后我必须重新装上我的bashrc才能让它再次工作。试着把重装烘焙成一个新的别名,但在切换到新的文件夹之前,仍然需要使用2-3次。

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2020-07-27 13:09:02

双引号允许在定义时计算别名内容--使用单引号将计算推迟到运行时:

代码语言:javascript
复制
alias res='var=$(ls --directory /path/to/results/res* | tail -n 1); cd $var'

另请参阅:

票数 24
EN

Ask Ubuntu用户

发布于 2020-07-28 13:26:04

使用ls的问题是,某些东西必须解析ls的输出,这被广泛认为是一件坏事。您会得到一些奇怪的文件名,其中包含tail可能会碰到的换行符和其他奇怪之处。

您可以通过简单的glob扩展来做您想做的事情:

代码语言:javascript
复制
for i in /path/to/res-*/; do :; done; cd "$i"

这实际上只是在事情列表中滴答作响,除了将其赋值给变量i之外,什么也不做。当它完成循环时,它只使用i的最后一个值。它不是很聪明,但它应该提供多达几百万个节点的可接受的性能。

正如其他人所建议的,您可以在~/.bashrc中将其化名为

代码语言:javascript
复制
alias res='for i in /path/to/res-*/; do :; done; cd "$i"'
票数 6
EN

Ask Ubuntu用户

发布于 2020-07-28 19:57:18

不要为比缩写命令的名称或将默认参数传递给命令更复杂的事情使用别名。使用函数代替。你会省去很多头痛的。

代码语言:javascript
复制
res () {
  local latest
  latest="$(ls --directory /path/to/results/res* | tail -n 1)" && cd "$latest"
}
  • local声明将变量保持在函数的局部变量中,因此它不会干扰函数外定义的同名变量。
  • 使用&&可以确保在cd失败时不会执行,因为没有匹配的文件。
  • local声明和分配给latest的任务在单独的指令中。否则,local latest="$(…)"的状态将为0,即使$(…)中的命令失败。
  • 始终在变量和命令替换周围使用双引号,除非您知道为什么可以不使用它们。

您的尝试没有起作用,因为在定义别名时,VAR=$(…)中的命令替换和cd $VAR中的变量替换都是计算出来的。如果使用单引号,则在运行别名时会计算引号中的确切字符串,在本例中可以使用。不过,我不建议使用别名,即使它可以正常工作,因为函数的正确使用要简单得多。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1262410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档