Вход для пользователей

Хорошие привычки #2 & #3

Изображение пользователя FraDe.

Хорошие привычки #2:Изменяй путь, вместо перемещения архива.

Следующий пример плохой практики - перемещение .tar архивов в определенную директорию для того чтобы разархивировать файл в той директории. Тебе абсолютно незачем это делать. Можно распаковать .tar архив в ту директорию, которую ты хочешь сразу же, используя ключ -C. Ключ -C используется для разархивирования в нужную директорию:

Листинг 4. Пример хорошей привычки #2: Использование ключа -C для распаковывания .tar архива
~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

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

Хорошие привычки #3: Совмещай команды с управляющими операторами.

Возможно ты уже знаешь, что в большинстве оболочек есть возможность объединять команды в одну строку используя разделитель ";" между ними. Точка с запятой - это управляющий оператор оболочки (shell), этот оператор полезен до тех пор пока используется набор не связанных команд. Но, например, если корректное исполнение второй команды непосредственно зависит от успешного выполнения первой, появляется необходимость использовать более подходящие управляющие операторы. К тому же, если ваша оболочка поддерживает их, то почему бы их не использовать!?

Запуск команды только, если предыдущая команда вернула статус выхода 0

Используй управляющий символ && для объединения двух команд, чтобы вторая команда выполнялась только в случае если первая вернула 0.

Листинг 5. Пример хорошей привычкиt #3: Объединение команд используя управляющие операторы
~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

В этом примере, содержимое архива распакуется в директорию ~/tmp/a/b/c, в том случае если директория существует. Если директории нет, то ничего не будет распаковано.

Запуск команды только, если предыдущая команда вернула ненулевое значение

Аналогичным образом, управляющий символ || разделяет две команды и запускает вторую только в случае, если первая вернула не ноль. Другими словами, если первая команда выполнена успешно, вторая не будет запущена. И наоборот, если первая выполнена с ошибкой, вторая будет запущена. Этот оператор часто используется для проверки существует ли необходимая директория, и в случае ее отсутствия нужно создать ее:

Листинг 6. Еще один пример хорошей привыячки #3: Объединение команд используя управляющие операторы
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

И можно объединить все управляющие операторы этой секции:

Листинг 7. Объединенный пример хорошей привычки #3: Объединение команд используя управляющие операторы
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

Комментарии

в седьмом листинге я бы не стал так поступать
ведь если такая директория существует, то текущая директория изменится и tar будет распакован уже не туда, куда нужно. Если для проверки существования директории все же хочется использовать команду cd, то лучше первые 2 команды обернуть скобками

~ $ (cd tmp/a/b/c || mkdir -p tmp/a/b/c) && tar xvf -C tmp/a/b/c ~/archive.tar

Но я не рекомендую использовать команду cd для проверки существования директории
лучше всего для этого подходит команда test

~ $ test -d tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

Изображение пользователя FraDe.

хм точно