Страница 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, работает!
Вот так метод тыка и понимание логики работы команд добавляет опыта))