【问题标题】:Using alias in bash function在 bash 函数中使用别名
【发布时间】:2018-10-15 20:44:40
【问题描述】:

我已经定义了这样的别名:

alias X="path/to/program"

我有一个这样定义的函数:

doX() { X -flag "$1"; }

我将这些放在我的 .bashrc 文件中,当我打开 bash 时,我在意外标记“-flag”附近收到语法错误。此时,已设置别名,但由于此错误,尚未设置函数。如果我跑

doX() { X -flag "$1"; }

此时,它起作用了。在 .bashrc 文件中设置别名后,我尝试将其放入文件并获取它,但它给了我相同的结果。

我该如何解决这个问题?有没有办法在 .bashrc 中定义别名和函数,以便在我打开 bash 时同时设置它们?

【问题讨论】:

  • 您是否有理由不只是设置路径而不是使用别名?
  • 我想做类似 (cd Desktop; path/to/program) 之类的事情,但我不确定是否可以在路径中执行此操作
  • 你可以在一个函数中做到这一点;您不能在别名中可靠地执行此操作(当您告诉它 foo bar 并尝试运行 (cd Desktop; path/to/program) bar 而不是 (cd Desktop; path/to/program bar) 时,alias foo='(cd Desktop; path/to/program)' 将表现不佳)。您可以在函数中通过将"$@" 传递到(仅)应替换参数的确切位置(顺便说一句,始终使用&&,而不是;,在cd 之后,这样你就不用'如果程序失败,请不要在错误的目录中运行您的程序)。

标签: bash function alias


【解决方案1】:

别名通常在脚本中不可用。如果您想让函数使用别名,请考虑将别名本身设为函数:

X() { path/to/program "$@"; }
doX() { X -flag "$1"; }

【讨论】:

  • 如果“路径”包含子命令,我可以这样做吗? X() { (cd Desktop; path/to/program) "$@"; } 另外,“$@”是做什么的?我应该改用“$*”吗?
  • @Abraham 你也许可以使用(cd Desktop; path/to/program "$@");参数必须在子shell中。
  • 更好,(cd Desktop && exec path/to/program "$@") -- 如果cd 失败,&& 确保您不会尝试运行程序,并且exec 消耗子shell,讨论性能成本创造了它。
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多