2012-01-27 86 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