【问题标题】:How do I reuse a command in bash with different parameters?如何在具有不同参数的 bash 中重用命令?
【发布时间】:2010-09-17 04:28:39
【问题描述】:

我有两个经常需要使用相同参数运行的脚本:

$ populate.ksh 9241 && check.ksh 9241

当我需要更改参数时(本例中为9241),我可以返回并编辑历史记录中的行。但是由于我需要在两个地方更改数字,所以我有时会打错字。我希望能够只更改一次参数以在两个地方进行更改。

【问题讨论】:

    标签: bash command-line scripting


    【解决方案1】:

    已经给出了正确的答案,但为了更一般的理解,请阅读手册页,特别注意 “历史扩展” 和相关的 shell 变量(例如“HISTCONTROL”、“@ 987654322@”等)。顺便说一句——你的寻呼机的搜索功能在阅读man bash时非常有用

    【讨论】:

      【解决方案2】:

      一种解决方案是简单地创建一个包装脚本 (populate_check.ksh),依次调用这些脚本:

      r=$1
      populate.ksh $r && check.ksh $r
      

      或者对于多个参数:

      for r; do
         populate.ksh $r && check.ksh $r
      done
      

      对于更短暂的任务,您还可以对命令进行参数化,以便更容易在历史记录中进行编辑:

      $ r=9241; populate.ksh $r && check.ksh $r
      

      或者一次做几个:

      $ for r in 9241 9242; do populate.ksh $r && check.ksh $r; done
      

      【讨论】:

      • 不要说“for r in $*”;更喜欢说“for r”。后者允许您使用空格或其他 IFS 字符指定参数。
      • 对于 lurkers 和 archives:for r 等同于 for r in "$@",对于那些不幸使用不支持较短形式的 shell 的人。
      • 太棒了!再一次,发布我知道答案的问题是有回报的。谢谢。
      • 你也可以定义一个shell函数并把它放在$SHELLrc文件中,比再写一个脚本文件要好。
      【解决方案3】:

      在 bash 中:

      !!:gs/9241/9243/
      

      是的,它使用gs///,而不是s///g。 :-)

      (zigdon 的回答使用最后一个以pop 开头的命令,例如populate.sh。我的回答使用最后一个命令,句号。选择适合你的。)

      【讨论】:

      • 我不知道是不是真的,但是这个功能似乎比仅仅编辑命令行使用了更多的击键。我曾经喜欢用爆炸符号来回忆历史,但由于某种原因我不再使用它了。但是,希望您的回答对其他人有所帮助。 ;-)
      • 考虑一个包含大量逻辑运算符和管道的复杂命令,这将是一个救生员:)
      • “g”对我不起作用。它只替换了第一次出现的 9241。bash 中是否有需要设置的配置选项?
      【解决方案4】:

      您还可以使用历史替换功能:

      !pop:gs/9241/1234
      

      像这样:

      $ populate.ksh 9241 && check.ksh 9241
      ...
      $ !pop:gs/9241/1234
      populate.ksh 1234 && check.ksh 1234
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        • 2018-03-05
        • 2012-08-15
        • 2021-10-30
        • 2013-06-04
        • 1970-01-01
        • 2011-06-17
        相关资源
        最近更新 更多