bash中“> |”的含义?

时间:2019-01-15 20:51:21

标签: bash io-redirection

Github help page for setting up SSH keys上,有一个带有一些代码的部分,供Windows用户复制粘贴到他们的.bashrc中以自动启动ssh-agent

这是他们提供的代码:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

>|符号的含义是什么?与普通的io重定向(例如>|)有什么区别?

3 个答案:

答案 0 :(得分:4)

来自bash reference manual

  

noclobber选项可用于避免通过输出重定向覆盖现有文件(请参阅内置内置集)。 >可能会使用“> |”重定向运算符。

如果您这样做:

set -o noclobber
echo > file

然后,如果文件file在执行之前存在,则第二条命令将失败。您可以使用>|

覆盖行为
set -o noclobber
echo >| file

即使设置了noclobber选项,file(如果存在)也将被覆盖。我很少看到>|noclobber选项。通常,人们[ -f file ]检查文件是否存在。

答案 1 :(得分:2)

>|>几乎相同,除了它将覆盖现有的常规文件。

只有在具备以下条件时,您才能看到差异:

set -o noclobber

否则,>|>都将覆盖现有的常规文件。

答案 2 :(得分:1)

是输出运算符,|。允许销毁该文件(如果存在)。

来源: https://unix.stackexchange.com/questions/45201/bash-what-does-do