我想在我的shell脚本中使用git pull
,它打印“已经是最新的。”,但是我不想打印它。我想将这些消息保存到变量中。这该怎么做?非常感谢!
更新:
➜ gitvar=$(git checkout alpha)
Already on 'alpha'
➜ echo $gitvar
M _gg.sh
M _posts/2018-10-22-about.md
我想将“已经在“ alpha”上”保存为变量“ gitvar”。 $(...)不。这和zsh有关系吗?
更新:
对不起。我以前不知道stdout和stderr。谢谢你告诉我这一点。
问题的答案是命令的输出可能是stdout,也可能是stderr。
1 output=$(command) # stdout only; stderr remains uncaptured
2 output=$(command 2>&1) # both stdout and stderr will be captured
答案 0 :(得分:2)
您可以通过两种方式将命令的标准输出保存到变量中:
a=`git pull`
a=$(git pull)
后者更易于嵌套,例如:
a=$(ls $(pwd))
但是,您应该注意,程序通常在两个流上打印消息:stdout
和stderr
。例如。 git pull
将在Already up-to-date
上打印stdout
,以上命令将正确捕获该fatal: not a git repository
。诸如stderr
之类的错误消息将打印在stderr
流上。为了将所有输出捕获到变量中,您需要将stdout
重定向到a=`git pull 2>&1`
中:
1
数字2
和stdout
分别对应于stderr
和<Exit xmlns="http:--tempuri-org-">
。
答案 1 :(得分:0)
您可以通过
var=$(command)
并访问
之类的varecho $var
答案 2 :(得分:0)
正如Auxilus指出的那样,您可以使用命令替换在变量中捕获命令的输出,例如$(...)
。然后可以将$(...)
中命令的输出分配给变量,例如
$ gitvar=$(git pull)
上面,git pull
的输出现在存储在gitvar
中。如果您想在日志文件中使用它,则可以在输出之前加上日期,以保留按时间顺序排列的日志。良好的日志日期格式为"%b %e %T"
(例如Dec 30 04:36:22
)。创建日期logvar
很简单,只需在字符串前加上日期,然后添加gitvar
的内容,例如
$ logvar="$(date +"%b %e %T") - $gitvar"
$ echo "$logvar"
Dec 30 04:36:36 - already up to date
然后,您可以将输出重定向到您选择的任何日志,或者根据需要使用原始的gitvar
。