【发布时间】:2017-06-28 19:50:01
【问题描述】:
我有以下脚本(在shellcheck.net 中没有返回错误):
#! /bin/bash
function git_info {
local git_status
git_status="$(git status 2> /dev/null)"
echo "$git_status" #returns new line
}
git_status 没有被设置,或者更确切地说,它正在获得一个空白值。这个函数在每个 bash 命令上运行。下面是控制台的样子。
local:~$
local:~$ git status
fatal: Not a git repository (or any of the parent directories): .git
local:~$ cd projects/testdir/
local:~/p/testdir$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
local:~/p/testdir$
每个local:~$ 之前的空行是函数回显的位置。当我运行git status 时,它应该输出你可以看到的内容。
在每个命令上运行此函数的代码在.bash_profile 中,如下所示:
source "$HOME/bin/testll.sh" # this is the file with git_info
PS1="$(git_info)" # prints current branch
PS1+="\[$COLOR_WHITE\]:\[$COLOR_BLUE\]\$(truncate)" # directory path
PS1+="\[$COLOR_WHITE\]\$\[$COLOR_RESET\] " # '#' for root, else '$'
export PS1
显然,这应该是根据 git 状态更改我的提示,但是我已将问题缩小到 git 状态起作用,因此为了展示 MCVE,我只显示了该代码。如果您出于某种原因需要查看更多内容,我可以将其添加到此问题中。
我知道2>/dev/null 应该返回一个空字符串或空值或错误信息,所以当git status 输出fatal: not a git repo... 消息时这是可以预料的。但是当我在一个 git repo 中时,这不应该是干扰。那么我在这里做错了什么?
【问题讨论】:
-
使用 bash -x 运行代码。这将使您能够更好地跟踪变量。