【问题标题】:Shell: Run other command with all but one parameterShell:使用除一个参数以外的所有参数运行其他命令
【发布时间】:2013-02-16 23:50:43
【问题描述】:

我想创建一个脚本名称git-as,它基本上是使用一堆预定义参数调用git 的别名。

git --git-dir="$1/.git" --work-tree="$1/" <<OTHER PARAMS>>

当我想在另一个存储库中调用 git 时,我使用:

git-as "$SRC_REPO" commit -m "Changes made to $CLASS_NAME"

如何让“其他参数”位正常工作?

请记住,我希望将 $1 参数(包含存储库位置)传递给 git。此外,其他参数可能包括双引号,如示例所示。

【问题讨论】:

    标签: git bash shell


    【解决方案1】:

    在 bash(但不是所有其他 shell)中,您可以使用 array slicing 上的变体来挑选一些参数,而无需先使用 shift 其他参数:

    #!/bin/bash
    git --git-dir="$1/.git" --work-tree="$1/" "${@:2}"
    

    【讨论】:

      【解决方案2】:

      Shell 脚本允许使用 shift n 左移 $*/$@ 参数,这可能适合您的目的。

      # t.sh
      echo ARGS $*
      shift 
      echo ARGS $*
      

      bash t.sh 1 2 3 4 5给了

      ARGS 1 2 3 4 5
      ARGS 2 3 4 5
      

      【讨论】:

      • $* 如果任何参数有空格或其他有趣的字符(例如多字提交消息),就会遇到麻烦。请改用"$@"(不要省略双引号!)
      • 同意 - 这些年来 $* 是我的默认回复。 ://
      【解决方案3】:

      我会这样做:

      #!/bin/bash
      readonly Directory="$1"
      shift
      git --git-dir="$Directory/.git" "$@"
      

      首先,这会将存储库位置 ($1) 复制到另一个变量 ($Directory)。然后它使用shift 将所有程序参数向左移动一位,因此$@ 只包含用于Git 的参数。从那里,只需使用新参数调用 Git。

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        相关资源
        最近更新 更多