2013-02-16 103 views
0

我想创建一个脚本名称git-as这基本上是用于调用git了一堆的预先定义的参数的别名所有,但一个参数。壳牌:运行其他命令

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

当我想打电话给混帐在另一个仓库,我使用:

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

如何获得“其他PARAMS”位是否正常工作?

请记住,我希望$1参数(包含存储库的位置)传递与git。另外,其他参数可能包括双引号,例如显示他们使用的示例。

回答

3

在bash(但不是所有其它shell),你可以使用一个变种上array slicing挑选出一些论点,而不必首先shift别人:

#!/bin/bash 
git --git-dir="$1/.git" --work-tree="$1/" "${@:2}" 
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 
+3

'$ *'会遇到麻烦,如果任何参数都有空格或其他有趣的字符(例如多字提交消息)。使用'“$ @”'来代替(不要离开关双引号!) – 2013-02-17 00:19:09

+0

同意 - 毕竟这些年来$ *是我的默认响应。 :/ – sotapme 2013-02-17 12:46:08

2

这是我会怎么做:

#!/bin/bash 
readonly Directory="$1" 
shift 
git --git-dir="$Directory/.git" "[email protected]" 

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