Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 非注释行grep文件的Git别名_Bash_Git_Grep - Fatal编程技术网

Bash 非注释行grep文件的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别名,以输出
.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的影响。)