Bash 非注释行grep文件的Git别名
我试图创建一个git别名,以输出Bash 非注释行grep文件的Git别名,bash,git,grep,Bash,Git,Grep,我试图创建一个git别名,以输出.git/info/exclude的内容,减去注释。我正在使用: [alias] excluded = !sh -c 'cat .git/info/exclude | grep -v "#"' 但这只是返回grep使用说明。在git别名之外执行该行可以正常工作。首先:!sh-c…与相比有点多余表示“通过shell运行其余部分”。这里使用sh-c的唯一原因是如果Git选择的“shell”不是sh,并且您明确需要sh 现在,如果您这样做,它失败的
.git/info/exclude
的内容,减去注释。我正在使用:
[alias]
excluded = !sh -c 'cat .git/info/exclude | grep -v "#"'
但这只是返回grep使用说明。在git别名之外执行该行可以正常工作。首先:
!sh-c…
与相比有点多余
表示“通过shell运行其余部分”。这里使用sh-c
的唯一原因是如果Git选择的“shell”不是sh
,并且您明确需要sh
现在,如果您这样做,它失败的原因应该更加明显:
[alias]
test = !sh -c 'echo "pound sign #"'
按原样运行,首先单独运行,然后使用GIT_TRACE=1
显示是谁吃了角色,它将生成:
[alias]
excluded = !cat .git/info/exclude | grep -v "\\#"
$git测试
磅符号
$GIT_TRACE=1 GIT测试
16:54:54.313367 git.c:702 trace:exec:git测试
16:54:54.314881运行命令。c:663跟踪:运行命令:git测试
16:54:54.318006运行命令。c:663跟踪:运行命令:“sh-c”“回声磅符号”
磅符号
如您所见,Git本身将文本'echo pound side#
作为sh-c
的(单个)参数。错误是shell的:它吃了#
,因为这是一个注释:
#! /bin/sh
# everything with # is a comment
echo like this # comment about the echo
如果必须将\
通过,则需要从shell中引用它,即在其前面加一个反斜杠\
。当然,要通过Git获得反斜杠,必须引用它,即在它前面加上反斜杠:
[alias]
test = !sh -c 'echo "pound sign \\#"'
对您自己的别名应用相同的方法(并删除前面提到的sh-c'…'
部分)会产生:
[alias]
excluded = !cat .git/info/exclude | grep -v "\\#"
它可以工作,但有一个UUOC(对Cat的无用使用):
够了。(如果不使用双引号,似乎无法引用
。
,即使这样,我们也必须始终保护它不受外壳的影响。)首先:!sh-c…
与相比有点多余
表示“通过shell运行其余部分”。这里使用sh-c
的唯一原因是如果Git选择的“shell”不是sh
,并且您明确需要sh
现在,如果您这样做,它失败的原因应该更加明显:
[alias]
test = !sh -c 'echo "pound sign #"'
按原样运行,首先单独运行,然后使用GIT_TRACE=1
显示是谁吃了角色,它将生成:
[alias]
excluded = !cat .git/info/exclude | grep -v "\\#"
$git测试
磅符号
$GIT_TRACE=1 GIT测试
16:54:54.313367 git.c:702 trace:exec:git测试
16:54:54.314881运行命令。c:663跟踪:运行命令:git测试
16:54:54.318006运行命令。c:663跟踪:运行命令:“sh-c”“回声磅符号”
磅符号
如您所见,Git本身将文本'echo pound side#
作为sh-c
的(单个)参数。错误是shell的:它吃了#
,因为这是一个注释:
#! /bin/sh
# everything with # is a comment
echo like this # comment about the echo
如果必须将\
通过,则需要从shell中引用它,即在其前面加一个反斜杠\
。当然,要通过Git获得反斜杠,必须引用它,即在它前面加上反斜杠:
[alias]
test = !sh -c 'echo "pound sign \\#"'
对您自己的别名应用相同的方法(并删除前面提到的sh-c'…'
部分)会产生:
[alias]
excluded = !cat .git/info/exclude | grep -v "\\#"
它可以工作,但有一个UUOC(对Cat的无用使用):
够了。(如果不使用双引号,似乎无法引用#
,即使这样,我们也必须始终保护它不受shell的影响。)