2012-01-27 95 views
1

我有一个别名,做一个简短的状态,用sed解析它,然后将文件添加到git的'assume-unchanged'索引。使用shell命令的Git配置

但是,这个问题似乎是一个简单的问题,我的理解是在OS X bash中转义单引号。

irm = !sh -c 'git ignore $(git st --short -u | sed '\''/^ D/s/^ D//g'\'')' 

这是gitconfig中的完整行。我可以在shell(使用sh和quote)中发出命令,但是当我尝试通过git irm

根据以下建议运行时,我得到了错误的git配置,我对此进行了一些配置。但是,它仍然不能在gitconfig中工作。所以我说这我~/.profile

alias irm="git ignore $(git st --short | grep '^ D' | sed 's/^ D //')" 
+0

那条sed线路给我带来了一些麻烦。我认为你正在寻找这个:sed -n -e“s/^ D // gp” – 2012-01-27 22:08:34

+0

我想确定它只能点击已删除的文件。应排除M A。 – Drew 2012-01-27 23:10:20

回答

1

您应该能够使用双引号,但你必须要逃避他们:

irm = !sh -c 'git ignore $(git st --short -u | sed \"s/^ D//\")' 

你不需要选择,因为该行操作与选择相同。如果您只想输出匹配并排除任何其他行的行,您可能需要使用-np以及sed,如Chris在注释中所示。

此外,由于模式被锚定,所以不需要全局选项。

+0

你在牛羚上吗?我在os x bash上得到这个错误:sh -c'git st --short -u | sed \“s/^ D // \”'sed:1:“”s/^“:无效的命令代码” – Drew 2012-01-27 23:15:46

+0

@Drew:是的,我在GNU上。尝试它而不逃避双引号。另一个尝试是将整个别名用双引号括起来:'irm =“!sh -c'git ignore $(git st --short -u | sed \”s/^ D // \“)'”'。你也可以尝试省略'sh -c':'git ignore $(git st --short -u | sed \'s/^ D // \“)''。这些为我工作。 – 2012-01-28 14:57:55