k001
k001
:...
April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

про баш и про даш

В баше можно сделать
. /some/file || exit 1

При этом мы получим, что хотим -- или заинлайним файл /some/file, или выйдем с ошибкой:
a.sh: line 1: /some/file: No such file or directory

Просто и понятно.

А в даше (который в Debian часто стоит шелом по умолчанию) такой фокус не проходит. Самый простой вариант добиться того, что мы делаем выше -- написать
cat /some/file >/dev/null || exit 1
. /some/file || exit 1


(Второй exit 1 тут нужен для совместимости с предыдущим вариантом, если последняя команда в /some/file вернула ненулевой код). Чем плох такой вариант (кроме того, что много писанины и имя файла два раза упоминается)? А тем, что сообщение об ошибке будет менее осмысленное:
cat: /some/file: No such file or directory

Казалось бы, причём тут cat?

Вариантом, работающим в обеих шеллах, будет что-то вроде
if test -f /some/file; then
echo "/some/file: No such file or directory"
exit 1
fi
. /some/file


Вроде всё хорошо (кроме того, что кода ещё больше, имя файла упоминается уже три раза)? Ан нет! Мы проверили, что файл есть, но не проверили, можно ли его прочитать. Ну, добавим ещё один if... Но даже и это не спасёт нас, потому что системное сообщение об ошибке strerror(ENOENT) мы заменили на своё произвольное, что сводит на нет усилия локализаторов.

Итого -- лучше всего сделать через cat, а юзер пускай догадывается, причём тут cat.

Если у кого есть более кошерный вариант -- расскажите.

From:
( )Anonymous- this user has disabled anonymous posting.
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.