bash - 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 )有何不同|
?
解决方案
来自bash 参考手册:
该
noclobber
选项可用于避免使用输出重定向覆盖现有文件(请参阅 The Set Builtin)。'>|' 重定向运算符可用于覆盖 noclobber。
如果你这样做:
set -o noclobber
echo > file
然后,如果该文件file
在执行之前存在,则第二个命令将失败。您可以使用覆盖该行为>|
set -o noclobber
echo >| file
即使noclobber
设置了选项,file
如果它存在也将被覆盖。我很少看到>|
和noclobber
选择。通常人们[ -f file ]
会检查文件是否存在。
推荐阅读
- julia - 如何将多个 Weave.jl (.jmd) 文件组合成一个输出?
- android - Tensorflow Lite Android GPU Delegate (C++) 静态构建,缺少 bazel 依赖项
- r - 确定 R 中每个组件的样本方差百分比
- ssh - 用于在远程服务器上运行命令的 Fish 脚本
- android - 我可以上传多少个 apk 到 google play 和 admob
- android - 在后台杀死的活动
- javascript - 如何在 jszip forEach 中保存解压缩的内容
- git - macOS Big Sur - 无法安装 Brew
- scilab - scilab/xcos V6.1下如何绘制波特图?
- javascript - Tab.Navigator -> 如何使用组件?