bash:传递脚本参数

时间:2011-06-28 03:47:52

标签: git bash

我在提交git项目之前运行了一系列命令,所以我把它放在一个bash脚本中。最后我有一个执行提交的块:

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m $1; fi

期望消息传递给脚本

$ ./dostuff_then_commit "my message"

当我这样做时,我明白了

fatal: Paths with -a does not make sense.

因为已定义$1但邮件未正确传递?任何人都可以看到问题和/或提出解决方案吗?谢谢你。

4 个答案:

答案 0 :(得分:6)

如果消息包含空格,它将扩展为git commit的多个参数。 (注意另一种情况下的引用。)引用它:

if [ -z "$1" ]; then
    git commit -a -m "no message"
else
    git commit -a -m "$1"
fi

几个附录:

  • 我也引用[]中的那个,原因略有不同:如果提交消息为空,则会从[获得缺少的参数诊断。再次引用它可以避免这种情况。 (您可能希望捕获它并让用户输入真实的提交消息,但如果有必要,您可能会收到一堆asdfzxcv提交消息....)

  • 您获取的错误消息具体是因为提交消息的第一个单词被视为提交消息,其余的作为特定文件名传递给提交;正如错误消息所述,当告诉git提交所有内容(-a)时,这是没有意义的。

答案 1 :(得分:2)

尝试用引号括住$1 - 否则git认为my是消息而message是其他内容。

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m "$1"; fi

答案 2 :(得分:2)

我想补充一点,你可以像这样组合选项:

git commit -am "some message"

答案 3 :(得分:1)

你应该使用"$1"代替$1 as $ 1`可以在其中包含空格。

$1my message代替:

git commit -a -m $1

给出:

git commit -a -m my message

,同时:

git commit -a -m "$1"

给出:

git commit -a -m "my message"