【问题标题】:Using a pipe within a bash alias在 bash 别名中使用管道
【发布时间】:2014-03-08 13:31:47
【问题描述】:

我没有shell脚本的经验,所以看不到以下情况的问题:

我定义了如下形式的别名(file.c 位于~/dir):

alias code="cd ~/dir | vim file.c"

输入时,我收到以下警告,并且没有打开正确的文件:

Vim: Warning: Input is not from a terminal
2 files to edit

我以为这个实例中的管道操作符会将两个命令分开,首先更改目录,然后打开文件。

【问题讨论】:

标签: bash pipe alias


【解决方案1】:

既然你提到你没有shell经验,我就啰嗦一下。

问题是你用错了管道。

cmd1 | cmd2

表示将 cmd1 的输出重定向到 cmd2 的输入。 也许您将它与 OR 运算符 || 混淆了,它可以用作:

cmd1 || cmd2

“如果cmd1不成功,执行cmd2”。不过,这对您的情况没有帮助。 以前的两个答案都适合您:

alias code="cd ~/dir; vim file.c"

使用分号,它只是一个简单的命令分隔符。或者我个人最喜欢的

alias code="cd ~/dir && vim file.c"

其中使用 AND 运算符。

cmd1 && cmd2

表示“执行cmd1,成功则执行cmd2,否则停止”。

【讨论】:

  • 也许用户心中有错误的用例,但如果你回答了所提出的问题仍然会很好,也许提供一个带有管道命令的 bash 别名示例。
【解决方案2】:

更好的别名是:

alias code="cd ~/dir && vim file.c && cd -"

如果cd 失败,这将确保您不会在当前目录中打开文件并返回到您所在的旧目录。

【讨论】:

    【解决方案3】:

    您不需要管道。使用分号作为命令分隔符。

    alias code="cd ~/dir; vim file.c"
    

    您也可以在别名中使用pushd and popd 返回上一个目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2011-05-06
      • 2013-05-03
      相关资源
      最近更新 更多