Shell:使用除一个参数外的所有参数运行其他命令

时间:2013-02-16 23:50:43

标签: git bash shell

我想创建一个脚本名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 param(包含存储库位置)传递给git。此外,其他参数可能包括双引号,例如显示它们使用的示例。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

# 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

答案 2 :(得分:2)

我将如何做到这一点:

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

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