【问题标题】:In Bash scripting, how to change directory to a file's directory path using the function `dirname`?在 Bash 脚本中,如何使用函数 `dirname` 将目录更改为文件的目录路径?
【发布时间】:2020-03-03 09:15:58
【问题描述】:

我想通过定义别名将目录更改为文件的目录:

alias direc=`cd | echo dirname "$1"`

但这不起作用。对于我如何重组它的任何想法表示赞赏。

【问题讨论】:

  • 这个别名有什么用?它与 dirname 完全一样吗?为什么不直接使用“目录名”?
  • 嗨,我实际上想将目录更改为文件的目录。这样我设想做direc path/to/file 来自动改变它。我更新了问题,我很抱歉
  • 这能回答你的问题吗? Make a Bash alias that takes a parameter? 您不能将参数传递给别名,只能传递给函数,但如果您愿意,可以创建一个调用函数的别名。

标签: bash alias cd dirname positional-parameter


【解决方案1】:

你正在倒退。 dirname 的结果应该是cd 的参数,而不是dirname 试图使用cd 的输出。

另外,使用函数而不是别名。

direc () {
  cd "$(dirname "$1")"
}

【讨论】:

  • 我将函数定义为function direct{cd "$(dirname "$1")"}。这是否等同于您拥有的上述内容?
  • 是的,但它使用非标准语法,没有真正的理由存在于 new 中。使用我展示的函数定义的标准形式。 (我的理解是允许使用function 关键字主要是为了简化为ksh 编写的代码的使用,尽管我什至不确定ksh 是否对这两种形式进行了任何区分。)
  • @user321627 您需要添加空格和分号:function direct { cd "$(dirname "$1")"; } 或者,如前所述,direct() { cd "$(dirname "$1")"; }
  • (或带参数扩展:direct() { cd "${1%/*}"; })
猜你喜欢
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
相关资源
最近更新 更多