在 Bash 脚本中,是否有一个单独的语句替代方案?
if [ -f /path/to/some/file ]; then
source /path/to/some/file
fi
最重要的是文件名只存在一次,而不是使其成为变量(这会增加更多行)。
例如,在 PHP 中你可以这样做
@include("/path/to/some/file"); // @ makes it ignore errors
在 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
如果返回 false,则不评估test
的第二部分&&
这是我能得到的最短的(文件名加上 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
如果您想始终获得干净的退出代码,并且无论如何都继续,那么您可以执行以下操作:
source ~/.bashrc || true && echo 'is always executed!'
如果您还想摆脱错误消息,那么:
source ~/.bashrc 2> /dev/null || true && echo 'is always executed!'
如果您不关心脚本的输出,您可以将标准错误重定向到/dev/null
以下内容:
$ source FILE 2> /dev/null