Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
git输出为空,除非在:echo“中捕获$(吉特分行)“;_Git_Shell_Homebrew_Zsh_Gnu - Fatal编程技术网

git输出为空,除非在:echo“中捕获$(吉特分行)“;

git输出为空,除非在:echo“中捕获$(吉特分行)“;,git,shell,homebrew,zsh,gnu,Git,Shell,Homebrew,Zsh,Gnu,我遇到了一个奇怪的问题,我真的不知道它是由Git安装或shell相关的东西引起的,还是完全由其他东西引起的。如果我在一个有大量分支和提交的Git存储库中,并且我尝试列出分支: $git分支 $git分行-a $git分支--列表 根本没有输出。但是,如果我通过echo运行这些命令的输出,结果可能与预期的一样: $echo“`git branch`” 本地分支-1 本地分支机构-2 *主人 $echo“$(git分支-a)” 本地分支-1 本地分支机构-2 *主人 遥控器/原点/磁头->原点/主

我遇到了一个奇怪的问题,我真的不知道它是由Git安装或shell相关的东西引起的,还是完全由其他东西引起的。如果我在一个有大量分支和提交的Git存储库中,并且我尝试列出分支:

$git分支
$git分行-a
$git分支--列表
根本没有输出。但是,如果我通过
echo
运行这些命令的输出,结果可能与预期的一样:

$echo“`git branch`”
本地分支-1
本地分支机构-2
*主人
$echo“$(git分支-a)”
本地分支-1
本地分支机构-2
*主人
遥控器/原点/磁头->原点/主控
遥控器/源/主
我的配置是macOS 10.14.6,通过自制安装Git 2.29.2。我正在使用带有Prezto或PowerLevel10k配置的ZSH 5.8(也是自制的)。虽然这些工具为Git命令添加了大量快捷方式别名,但从
Git*
中没有任何别名会干扰:

$type git
git是/usr/local/bin/git
git是/usr/bin/git
我还尝试了VirginBash5.0.18shell,结果是一样的

ZSH tab completion正确显示分支,因此如果I,例如:

$git签出
本地分支-1硕士
本地分支机构-2来源/负责人
校长/校长
我从其他一些Git命令中得到了类似的行为,例如
Git config--local--list
。但是所有的“操作”命令(
push
pull
add
commit
)似乎都按预期工作,包括正确的输出。(但也有一些“仅限信息”的命令,如
git-version

在我看来,这就像是某种shell配置错误,但据我所知,这只会影响Git,而且在我的花式ZSH安装和vanilla Bash中都会发生,所以这两者之间可能会有一些奇怪的交互?我到处寻找有类似问题的其他人,但我发现的一切都归结为没有在新存储库中列出且没有提交的分支,这里绝对不是这样

我现在有点不知所措,所以我希望有人能提出进一步调查的建议。

如果这只发生在输出到TTY时,可能是寻呼机问题。 在常规终端中运行时,除非使用
$(git…
git…|捕获或重定向git的输出其他程序
isatty(1)
是正确的,因此git会自动调用寻呼机,让用户阅读太长的内容而无法在一个屏幕上显示

如果是寻呼机问题,有几个选项可以调试。
  • 看看没有寻呼机问题是否会解决

    • git--no-pager分支是否仍然存在问题
  • 检查正在使用的寻呼机

    • declare-p GIT_PAGER
      将通过环境显示仅为
      GIT
      配置的寻呼机
    • git config core.pager
      将通过其配置文件显示仅为
      git
      配置的寻呼机
    • declare-p PAGER
      将显示配置为供操作系统一般使用的寻呼机
  • 检查寻呼机的配置方式,并尝试清除或简化该配置

    • 如果您的寻呼机是
      LESS
      declare-p LESS
      将显示通过环境为其配置的选项,
      unset LESS
      将临时清除这些选项
    • 如果您的寻呼机是
      MORE
      declare-p MORE
      将显示通过环境为其配置的选项,
      unset MORE
      将临时清除这些选项
    • 对于另一个寻呼机,考虑阅读它的手册。

  • 关于这一具体情况: OP在他们的环境中有
    LESS='-F-g-i-M-R-S-z-4'
    export
    ed。如果要显示的内容少于一页,则
    -F
    参数
    less
    指示其退出


    在OP的(MacOS)系统上,当使用
    -F
    调用
    less
    的库存版本时,在将原始内容发送到stdout之前退出;这可以通过移除该标志或安装更新版本的
    less

    @matt来修复,答案的目标是适用于所有人,而不仅仅是OP。我怀疑其他人会有完全相同的字符串,因此我不相信在答案中包含该字符串本身会添加任何实用程序;我们的目标是写一个对所有寻呼机配置错误的人都有帮助的答案。这就是问题所在。我的
    PAGER
    环境变量设置为使用
    less
    ,这是
    /usr/bin
    中的macOS系统二进制文件。我还有一个
    LESS
    环境变量,其中包含
    -F
    ,当输入少于一整页时,可以选择自动退出。我相信该版本的
    less
    (v487)中可能存在一个bug,导致在显示任何输入之前退出。删除
    -F
    会显示输出,但短输入时会保持寻呼机打开,这是不可取的。但是,安装自制的
    less
    (v551)为我解决了这个问题,同时允许我保留
    -F
    选项。谢谢大家!@matt,经过编辑,答案明确建议
    unset LESS
    。这一建议本身就解决了OP的问题,也解决了它的变体,这些变体不依赖于
    -F
    来获得相同的行为(并且碰巧是在
    版本较少的平台上,
    -F
    具有不期望的行为)。通过这种方式,我们既涵盖了OP的直接问题,也涵盖了其他尚未发现的导致同一类故障的途径(其中有无限个/无限个)。@CharlesDuffy我仍然认为,如果OP添加了一个自我回答,以保留实际的指定值,我们都会过得更好