Страница 1 из 1
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 09:08
ogankvik
Пусть выходные длятся вечно!
Есть папки /1
, мне нужно переименовать её в /2
. Для этого сделал команду mv /1/ /2/
. Но есть один нюанс. Этак команда выполняется каждый раз, при запуске системы, а папку нужно переименовать единожды. Нашел что можно применить оператор &&
, который срабатывается только если предыдущая команда была выполнена с ошибкой. Должно получиться ? || mv /1/ /2/
. Папки /2/
в системе не существует, она появится там только после выполнения mv /1/ /2/
и /2/
будет находится там веки вечные. Какую команду можно применить, чтобы она дала ошибку, на пока ещё не существующую папку /2/
, чтобы сработал оператор ||
?
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 09:12
symon2014
ogankvik писал(а): ↑16 июл 2023, 09:08
применить оператор &&, который срабатывается только если предыдущая команда была выполнена с ошибкой.
Вот с точностью до наоборот. Следующая за этим оператором команда выполнится только тогда , кода предыдущая закончится правильно.
ogankvik писал(а): ↑16 июл 2023, 09:08
mv /1/ /2/ и /2/
И приведи точный вариант команды , по моему здесь чего то не хватает.
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 09:18
ogankvik
Исправил оператор. В принципе, не важно && или ||. Важен результат

. Команда
mv /opt/1C/v8.3/x86_64/ /opt/1C/v8.3/x86_64l/
, которая должна выполнятся только если
/opt/1C/v8.3/x86_64l/
не существует:
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 09:33
symon2014
ogankvik писал(а): ↑16 июл 2023, 09:18
В принципе, не важно && или ||. Важен результат
mtuser@symon2014:~$ ls "~/Вася/" || echo "Directory /dir1/ DOES NOT exists."
ls: невозможно получить доступ к '~/Вася/': Нет такого файла или каталога
Directory /dir1/ DOES NOT exists.
mtuser@symon2014:~$
Вот тебе для примера )) , после || можешь написать свою команду , только добавь
sudo
,
/opt
системный раздел.
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 10:10
slant
symon2014 писал(а): ↑16 июл 2023, 09:33
Вот тебе для примера )) , после || можешь написать свою команду , только добавь sudo , /opt системный раздел.
Не учи дурному.
sudo в рабочем скрипте - дурной тон. Если нужно чтобы скрипт что-то делал на системном разделе - сам скрипт должен запускаться с соответствующими правами. Даже если это делается из другого скрипта через sudo. Но развязку между "скрипт для выполнения работы" и "скрипт для запуска с повышенными привилегиями" крайне желательно обеспечить. Иначе потом этот монолитный скрипто-кирпич только переписывать каждый раз, и заодно молится чтобы права на запуск не слетели когда не нужно.
ogankvik писал(а): ↑16 июл 2023, 09:18
В принципе, не важно && или ||. Важен результат
Так же на счет проверок. Есть штатный и гибкий способ.
man test
Вполне совмещается с методом && и ||, т.к. test тоже возвращает код "удачи" если заданная там проверка прошла положительно.
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 10:14
symon2014
slant писал(а): ↑16 июл 2023, 10:10
Не учи дурному.
И не собирался. Просто его цитата с командой mv и системным разделом навела меня на мысль что он вообще это делает находясь под рутом.
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 10:31
ogankvik
Спасибо боги линукса! Работает
ls /opt/1C/v8.3/x86_64l/ || mv /opt/1C/v8.3/x86_64/ /opt/1C/v8.3/x86_64l/
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 11:18
rogoznik
ogankvik писал(а): ↑16 июл 2023, 10:31
ls /opt/1C/v8.3/x86_64l/ || mv /opt/1C/v8.3/x86_64/ /opt/1C/v8.3/x86_64l/
Это что за жесть? Есть ведь нормальные методы проверки.
Код: Выделить всё
#!/bin/bash
if [[ ! -d "/путь/до/каталога" ]]
then
echo делаем_что-то_если_каталог_не_существует
fi
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 12:10
slant
rogoznik писал(а): ↑16 июл 2023, 11:18
Это что за жесть?
Жесть там только первая часть, и то относительная. Работать будет.
А то что ты предложил, при подобной нотации будет выглядеть так:
test -d "/путь/до/каталога" || echo делаем_что-то_если_каталог_не_существует
Писать быстрее, читается в принципе тоже неплохо, но основная ценность в том, что не зависит от вариаций - в bash или sh будет запускаться такой конструкции без разницы. В отличии от красивой нотации у тебя - там иногда нюансы вылазят.

Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 13:30
ogankvik
slant писал(а): ↑16 июл 2023, 12:10
test -d "/путь/до/каталога" || echo делаем_что-то_если_каталог_не_существует
test -d
попробовал в первую очередь, ожидая что терминал выдаст сообщение "такого каталога не существует" и тем самым я бы понял, работает или нет. Терминал ничего не выдал. По этому остановился на
ls
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 13:38
slant
ogankvik писал(а): ↑16 июл 2023, 13:30
ожидая что терминал выдаст сообщение "такого каталога не существует" и тем самым я бы понял, работает или нет. Терминал ничего не выдал.
Естественно не выдал. test выдает только errorlevel - код завершения. На который может реагировать &&, || или if then else (они не на сам вывод консоли реагируют).
Чтобы увидеть реакцию на test в консоли, нужно написать примерно то, что я выше показал. Через echo или другую программу.
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 14:30
ogankvik
slant, спасибо, переделал на test -d, работает!
Команда возвращающая ошибку при выполнении к несуществующей папке
Добавлено: 16 июл 2023, 14:34
symon2014
ogankvik писал(а): ↑16 июл 2023, 14:30
slant, спасибо, переделал на test -d, работает!
Вот так метод тыка и понимание логики работы команд добавляет опыта))