首页 > 解决方案 > bash中`>|`的含义?

问题描述

设置 SSH 密钥的 Github 帮助页面上,有一个部分包含一些代码供 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 重定向(例如>or )有何不同|

标签: bashio-redirection

解决方案


来自bash 参考手册

noclobber选项可用于避免使用输出重定向覆盖现有文件(请参阅 The Set Builtin)。'>|' 重定向运算符可用于覆盖 noclobber。

如果你这样做:

set -o noclobber
echo > file

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

set -o noclobber
echo >| file

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


推荐阅读