【问题标题】:Shell aliasing multiple argumentsShell 给多个参数起别名
【发布时间】:2009-11-14 21:34:50
【问题描述】:

有没有一种好方法可以为命令别名进行多次替换?

例如

alias cmd = 'ssh -R $1:$2:$1:$2 $3 | something {$1, $2, $3}'
cmd 127.0.0.1 1234 server

像这样..

实际上,像这样通过管道输出并没有任何意义,但我希望看到类似的语法。

拥有命名映射也很好,但只有索引就可以了。

也许使用 awk?

【问题讨论】:

  • 所以你会知道,别名定义不接受 any 参数。它只是附加了最后的内容。 alias foo=bar; foo bazbar baz 相同。

标签: shell mapping substitution


【解决方案1】:

改用shell函数怎么样?:

$ cmd() { echo ssh -R $1:$2:$1:$2 $3 ; echo something {$1, $2, $3} ; }
$ cmd 127.0.0.1 1234 server
ssh -R 127.0.0.1:1234:127.0.0.1:1234 server
something {127.0.0.1, 1234, server}

【讨论】:

  • 或者一个直接的 shell 脚本——你需要从某个地方加载函数,有时,但除非你经常做这个操作,否则使用脚本的成本超过函数将是最小的(好处是如果你不使用它就不会加载脚本)。
  • @Jonathan - 是的,但是 OP 要求提供别名,并且 shell 函数比 shell 脚本更接近。相同的惯例适用于定义函数和别名 - 将其放在您的 .bashrc 或其他任何内容中。
【解决方案2】:

您必须使用函数来定义它。示例:

cmd () { echo -e "$1\n$2" | grep "$1"; }

不要忘记{echo 之间的空格。

这将导致以下行为:

$ cmd hello world
hello

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-05-30
    • 2022-11-04
    相关资源
    最近更新 更多