【问题标题】:Adding alias to bashrc to run multiple commands and pass a variable?向 bashrc 添加别名以运行多个命令并传递变量?
【发布时间】:2015-03-13 16:00:43
【问题描述】:

不擅长创建别名,但我有几个命令要运行,我想一次全部执行。

$ activator
$ clean
$ compile
$ run 9002

我想将所有这些命令组合成一个命令,例如:

$ activate 9002

通常我想我会知道如何执行此操作,但这里的问题是它需要等到上一个命令完成并且提示返回。另外,如果我执行$ activate 9000,那么最后一个命令将运行$ run 9000

有没有办法在我的别名中做到这一点?

【问题讨论】:

    标签: bash shell command-line alias


    【解决方案1】:

    您可以使用分号在别名中组合多个命令:

    alias name_goes_here='activator; clean; compile; run'
    

    那么你可以使用name_goes_here 9002

    或者,如果您需要更复杂的东西,请考虑创建一个函数。它们更加灵活。

    【讨论】:

    • 我多次使用这个。但是现在,我收到错误syntax error near unexpected token ';'
    • 和我一样,它会抛出类似“bash: syntax error near unexpected token `;'”的错误
    【解决方案2】:

    如果您只想在前者成功完成后继续执行后面的命令,请使用&& 而不是;,如下所示:

    alias activate="activator && clean && compile && run"
    

    【讨论】:

    • 好的。其他答案没有这样做,所以我想也许我的工作不正常。
    【解决方案3】:

    对于一般情况,别名是该工作的错误工具。

    它会在这种特定情况下工作,因为它只是最后一个要传递参数的命令,并且不需要条件逻辑,但函数是更安全的方法。

    例如,与别名完全等效的 shell 函数可以这样编写:

    activate() { activator; clean; compile; run "$@"; }
    

    ...但是您也可以添加其他要执行的步骤命令接受参数之后,这是别名不允许的:

    activate() { activator; clean; compile; run "$@"; cleanup; }
    

    【讨论】:

      【解决方案4】:

      你可以使用2个bash语法系统:

      • ";"分隔命令
      • “$1”作为您的第一个参数。

      它为您提供以下别名:

      alias activate="activator;clean;compile;run $1"
      

      希望有所帮助。

      编辑:

      我的错。您可以将 $1 与函数一起使用,而不是别名。

      【讨论】:

      • $1 在别名中不起作用。如果这个别名 出现 在使用时可以工作,它这样做只是因为 $1 正在扩展为一个空字符串,然后是别名之后的所有内容(不仅仅是第一个参数,而是 everything - 这就是别名的工作方式)正在附加。 (因此,如果在 $1 先前设置为意外值的情况下使用它,它的行为会令人惊讶)。
      • 如果您希望只传递第一个参数,而不是附加所有剩余的命令行内容,则需要使用函数,而不是别名。
      • 确实,我的错。事后想了想,无法纠正自己。谢谢指正。
      猜你喜欢
      • 2015-08-23
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多