【问题标题】:Prevent bash alias from evaluating statement at shell start防止 bash 别名在 shell 启动时评估语句
【发布时间】:2018-11-12 06:12:31
【问题描述】:

假设我有以下别名。

alias pwd_alias='echo `pwd`'

此别名不是“动态的”。一旦 shell 启动,它就会评估 pwd。有没有办法将刻度中表达式的评估延迟到别名的运行时?

【问题讨论】:

  • 单引号应该这样做(在我的系统上也是如此)。
  • alias pwd_alias='echo $PWD'

标签: bash alias


【解决方案1】:

你真正想要的是一个函数,而不是一个别名。

pwd_alias() {
   echo "$PWD"
}

别名只不过是替换文本而已。任何复杂的事物都需要函数。

【讨论】:

  • 你把这个函数放在哪里以便作为别名工作?在 /usr/local/bin 的文件中,或者你可以把它放在 .bashrc 中?
  • @dgilperez ~/.bashrc 很好。
  • 这个函数语法对我不起作用。我不得不使用function pwd_alias { echo "$PWD" }
  • @JosephKiran 答案中的函数语法是 POSIX 语法。当把它放在一行时,你需要; 例如pwd_alias() { echo "$PWD"; }
  • @jordanm 请原谅分号。我在评论中用多行写了它,但它被格式化为一行。我的意思是,我需要在定义中使用function 关键字。当我在 .bashrc 文件中尝试答案中的语法时,第一个括号出现语法错误。
【解决方案2】:

正如 jordanm 所说,别名只不过是替换文本而已。
如果您希望 echo 的参数是 bash 扩展的 pwd 的输出,那么我不明白您的问题。
如果您希望 echo 的参数为 `pwd` 并保留反引号,确实可以,例如:

alias a="echo '\`pwd\`'"

所以,如果不是 echo 你有一些东西在它自己的运行时做反引号扩展,也许这就是你想要的。

【讨论】:

  • 以上不行,需要去掉单引号:alias a="echo \`pwd\`"
  • 是的,它确实按我的预期工作,当您调用 shell 时会回显 pwd 并保留反引号。
【解决方案3】:

我不相信您可以更改在 shell 启动时发生的评估。由于创建别名的过程是在 shell 启动时运行的,因此会评估 pwd。您可以简单地将别名更改为只运行pwd 而无需将反引号作为pwd 输出而无需回显。解决此问题的一种简单方法是,如果您不希望更改为使用别名,请在路径中从使用别名更改为 shell 脚本。

#!/bin/bash
pwd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 2013-06-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多