在 Bash 脚本中,是否有单一语句替代方案?
if [ -f /path/to/some/file ]; then
source /path/to/some/file
fi
最重要的是文件名只存在一次,而不将其设为变量(这会添加更多行)。
例如,在 PHP 中你可以这样做
@include("/path/to/some/file"); // @ makes it ignore errors
定义您自己的
@include
版本是一种选择吗?
include () {
[[ -f "$1" ]] && source "$1"
}
include FILE
如果您担心没有重复文件名的一行,也许:
FILE=/path/to/some/file && test -f $FILE && source $FILE
如果您担心警告(并且源文件的存在对于您的脚本并不重要),只需消除警告即可:
source FILE 2> /dev/null
你可以试试
test -f $FILE && source $FILE
如果
test
返回 false,则不评估 &&
的第二部分
如果您想始终获得干净的退出代码,并无论如何都继续,那么您可以这样做:
source ~/.bashrc || true && echo 'is always executed!'
如果您也想摆脱错误消息,那么:
source ~/.bashrc 2> /dev/null || true && echo 'is always executed!'
这是我能得到的最短的(文件名加 20 个字符):
F=/path/to/some/file;[ -f $F ] && . $F
相当于:
F=/path/to/some/file
test -f $F && source $F
为了提高可读性,我更喜欢这种形式:
FILE=/path/to/some/file ; [ -f $FILE ] && . $FILE
如果您不关心脚本的输出,您可以将标准错误重定向到
/dev/null
,如下所示:
$ source FILE 2> /dev/null
避免重复的最佳方法是使用特殊变量
$_
(=上一个命令的最后一个参数):
test -f /path/to/some/file && source $_
帖子 我怎样才能回忆起上一个 bash 命令的参数? 对于那些特殊的“回忆”变量有很多有趣的细节。