在Bash脚本编写中,是否有一个单独的声明替代?
if [ -f /path/to/some/file ]; then
source /path/to/some/file
fi
最重要的是文件名只有一次,而不是变量(这会增加更多行)。
例如,在PHP中你可以这样做
@include("/path/to/some/file"); // @ makes it ignore errors
答案 0 :(得分:34)
定义您自己的@include
版本是一个选项吗?
include () {
[[ -f "$1" ]] && source "$1"
}
include FILE
答案 1 :(得分:14)
如果你担心单行而不重复文件名,可能是:
FILE=/path/to/some/file && test -f $FILE && source $FILE
答案 2 :(得分:8)
如果您担心警告(并且源文件不存在对您的脚本不重要),请删除警告:
source FILE 2> /dev/null
答案 3 :(得分:3)
你可以尝试
test -f $FILE && source $FILE
如果test
返回false,则不评估&&
的第二部分
答案 4 :(得分:3)
这是我能得到的最短(文件名加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
答案 5 :(得分:2)
如果您想始终获得一个干净的退出代码,并且无论如何都要继续,那么您可以这样做:
source ~/.bashrc || true && echo 'is always executed!'
如果您还想删除错误消息,则:
source ~/.bashrc 2> /dev/null || true && echo 'is always executed!'
答案 6 :(得分:0)
如果您不关心脚本的输出,您可以将标准错误重定向到/dev/null
,如下所示:
$ source FILE 2> /dev/null