Я относительно новичок в командной строке Unix, и я не совсем понимаю, что делает эта команда:

[[ ! -e "$text_file" ]] || { echo "Error: I cannot overwrite '$text_file'." >&2;}

У кого-нибудь есть идея?

0
CafféSospeso 19 Фев 2020 в 19:27

2 ответа

Лучший ответ

Прежде всего, он проверяет 2 условия с логическим ИЛИ || оператор .

-e ФАЙЛ - Истинно, если ФАЙЛ существует и является файлом, поэтому условие сводит на нет результат этой проверки.

А затем, если это ложно, он отправляет и печатает сообщение и отправляет его в stderr (> & 2). Если первое условие истинно, то второе условие не будет оцениваться (конечно, это логический ИЛИ способ работы по умолчанию)

В Unix-мире stdout обычно используется, когда все работает правильно, а stderr обычно используется для печати сообщений, когда что-то идет не так.

По умолчанию stdout и stderr выводятся на экран. Основное отличие состоит в том, что> и | операторы по умолчанию ловят stdout, но не stderr.

Вы также можете проверить другие вещи, как показано ниже:

-r ФАЙЛ - Истинно, если ФАЙЛ существует и доступен для чтения.
-w ФАЙЛ - Истинно, если ФАЙЛ существует и доступен для записи.
-x ФАЙЛ - Истинно, если ФАЙЛ существует и является исполняемым.
-d ФАЙЛ - Истинно, если ФАЙЛ существует и является каталогом.
-e ФАЙЛ - Истинно, если ФАЙЛ существует и является файлом, независимо от его типа (узел, каталог, сокет и т. д.).
-f ФАЙЛ - Истинно, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством)

2
CiaPan 9 Апр 2020 в 14:43

Это проверяет файл на наличие и! отрицает выражение См. Список тестирования файлов bash

0
Manziel 19 Фев 2020 в 16:30