在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重定向(例如>
或|
)有什么区别?
答案 0 :(得分:4)
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