在 Bash 中获取文件(仅当存在时)最简洁的方法是什么?

问题描述 投票:0回答:8

在 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 error-handling include
8个回答
48
投票

定义您自己的

@include
版本是一种选择吗?

include () {
    [[ -f "$1" ]] && source "$1"
}

include FILE

17
投票

如果您担心没有重复文件名的一行,也许:

FILE=/path/to/some/file && test -f $FILE && source $FILE

12
投票

如果您担心警告(并且源文件的存在对于您的脚本并不重要),只需消除警告即可:

source FILE 2> /dev/null

6
投票

你可以试试

test -f $FILE && source $FILE

如果

test
返回 false,则不评估
&&
的第二部分


5
投票

如果您想始终获得干净的退出代码,并无论如何都继续,那么您可以这样做:

source ~/.bashrc || true && echo 'is always executed!'

如果您也想摆脱错误消息,那么:

source ~/.bashrc 2> /dev/null || true && echo 'is always executed!'

4
投票

这是我能得到的最短的(文件名加 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

1
投票

如果您不关心脚本的输出,您可以将标准错误重定向到

/dev/null
,如下所示:

$ source FILE 2> /dev/null


0
投票

避免重复的最佳方法是使用特殊变量

$_
(=上一个命令的最后一个参数):

test -f /path/to/some/file && source $_

帖子 我怎样才能回忆起上一个 bash 命令的参数? 对于那些特殊的“回忆”变量有很多有趣的细节。

© www.soinside.com 2019 - 2024. All rights reserved.