包含/源脚本(如果它存在于Bash中)

时间:2012-05-24 10:21:57

标签: bash error-handling include

在Bash脚本编写中,是否有一个单独的声明替代?

if [ -f /path/to/some/file ]; then
    source /path/to/some/file
fi

最重要的是文件名只有一次,而不是变量(这会增加更多行)。

例如,在PHP中你可以这样做

@include("/path/to/some/file"); // @ makes it ignore errors

7 个答案:

答案 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