Ответ 1
Определяет ли ваша версия @include
параметр?
include () {
[[ -f "$1" ]] && source "$1"
}
include FILE
В сценарии 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
Если вас беспокоит предупреждение (и отсутствие существующего файла не является критическим для вашего script), просто избавляйтесь от предупреждения:
source FILE 2> /dev/null
Вы можете попробовать
test -f $FILE && source $FILE
Если test
возвращает false, вторая часть &&
не оценивается
Это самое короткое, что я мог получить (имя файла плюс 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
Если вы не связаны с выходом script, вы можете просто перенаправить стандартную ошибку на /dev/null
примерно так:
$ source FILE 2> /dev/null