Команда возвращающая ошибку при выполнении к несуществующей папке

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#1

16 июл 2023, 09:08

Пусть выходные длятся вечно!

Есть папки /1, мне нужно переименовать её в /2. Для этого сделал команду mv /1/ /2/. Но есть один нюанс. Этак команда выполняется каждый раз, при запуске системы, а папку нужно переименовать единожды. Нашел что можно применить оператор &&, который срабатывается только если предыдущая команда была выполнена с ошибкой. Должно получиться ? || mv /1/ /2/. Папки /2/ в системе не существует, она появится там только после выполнения mv /1/ /2/ и /2/ будет находится там веки вечные. Какую команду можно применить, чтобы она дала ошибку, на пока ещё не существующую папку /2/, чтобы сработал оператор ||?

Решение symon2014 » 16 июл 2023, 09:33
ogankvik писал(а):
16 июл 2023, 09:18
В принципе, не важно && или ||. Важен результат
mtuser@symon2014:~$ ls "~/Вася/" || echo "Directory /dir1/ DOES NOT exists."
ls: невозможно получить доступ к '~/Вася/': Нет такого файла или каталога
Directory /dir1/ DOES NOT exists.
mtuser@symon2014:~$

Вот тебе для примера )) , после || можешь написать свою команду , только добавь sudo , /opt системный раздел.

Перейти к ответу ➙
Последний раз редактировалось пользователем 1 ogankvik; всего редактировалось раз: 16

Аватара пользователя

symon2014
Сообщения: 5936
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#2

16 июл 2023, 09:12

ogankvik писал(а):
16 июл 2023, 09:08
применить оператор &&, который срабатывается только если предыдущая команда была выполнена с ошибкой.
Вот с точностью до наоборот. Следующая за этим оператором команда выполнится только тогда , кода предыдущая закончится правильно.
ogankvik писал(а):
16 июл 2023, 09:08
mv /1/ /2/ и /2/
И приведи точный вариант команды , по моему здесь чего то не хватает.

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#3

16 июл 2023, 09:18

Исправил оператор. В принципе, не важно && или ||. Важен результат :). Команда mv /opt/1C/v8.3/x86_64/ /opt/1C/v8.3/x86_64l/, которая должна выполнятся только если /opt/1C/v8.3/x86_64l/ не существует:

Аватара пользователя

symon2014
Сообщения: 5936
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#4

16 июл 2023, 09:33

ogankvik писал(а):
16 июл 2023, 09:18
В принципе, не важно && или ||. Важен результат
mtuser@symon2014:~$ ls "~/Вася/" || echo "Directory /dir1/ DOES NOT exists."
ls: невозможно получить доступ к '~/Вася/': Нет такого файла или каталога
Directory /dir1/ DOES NOT exists.
mtuser@symon2014:~$

Вот тебе для примера )) , после || можешь написать свою команду , только добавь sudo , /opt системный раздел.

Аватара пользователя

slant
Сообщения: 4511
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1995 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#5

16 июл 2023, 10:10

symon2014 писал(а):
16 июл 2023, 09:33
Вот тебе для примера )) , после || можешь написать свою команду , только добавь sudo , /opt системный раздел.
Не учи дурному.
sudo в рабочем скрипте - дурной тон. Если нужно чтобы скрипт что-то делал на системном разделе - сам скрипт должен запускаться с соответствующими правами. Даже если это делается из другого скрипта через sudo. Но развязку между "скрипт для выполнения работы" и "скрипт для запуска с повышенными привилегиями" крайне желательно обеспечить. Иначе потом этот монолитный скрипто-кирпич только переписывать каждый раз, и заодно молится чтобы права на запуск не слетели когда не нужно.
ogankvik писал(а):
16 июл 2023, 09:18
В принципе, не важно && или ||. Важен результат
Так же на счет проверок. Есть штатный и гибкий способ. man test Вполне совмещается с методом && и ||, т.к. test тоже возвращает код "удачи" если заданная там проверка прошла положительно.

Аватара пользователя

symon2014
Сообщения: 5936
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#6

16 июл 2023, 10:14

slant писал(а):
16 июл 2023, 10:10
Не учи дурному.
И не собирался. Просто его цитата с командой mv и системным разделом навела меня на мысль что он вообще это делает находясь под рутом.

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#7

16 июл 2023, 10:31

Спасибо боги линукса! Работает
ls /opt/1C/v8.3/x86_64l/ || mv /opt/1C/v8.3/x86_64/ /opt/1C/v8.3/x86_64l/

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#8

16 июл 2023, 11:18

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

ИзображениеИзображение

Аватара пользователя

slant
Сообщения: 4511
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1995 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#9

16 июл 2023, 12:10

rogoznik писал(а):
16 июл 2023, 11:18
Это что за жесть?
Жесть там только первая часть, и то относительная. Работать будет. :)

А то что ты предложил, при подобной нотации будет выглядеть так:

test -d "/путь/до/каталога" || echo делаем_что-то_если_каталог_не_существует

Писать быстрее, читается в принципе тоже неплохо, но основная ценность в том, что не зависит от вариаций - в bash или sh будет запускаться такой конструкции без разницы. В отличии от красивой нотации у тебя - там иногда нюансы вылазят. :)

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#10

16 июл 2023, 13:30

slant писал(а):
16 июл 2023, 12:10
test -d "/путь/до/каталога" || echo делаем_что-то_если_каталог_не_существует
test -d попробовал в первую очередь, ожидая что терминал выдаст сообщение "такого каталога не существует" и тем самым я бы понял, работает или нет. Терминал ничего не выдал. По этому остановился на ls

Аватара пользователя

slant
Сообщения: 4511
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1995 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#11

16 июл 2023, 13:38

ogankvik писал(а):
16 июл 2023, 13:30
ожидая что терминал выдаст сообщение "такого каталога не существует" и тем самым я бы понял, работает или нет. Терминал ничего не выдал.
Естественно не выдал. test выдает только errorlevel - код завершения. На который может реагировать &&, || или if then else (они не на сам вывод консоли реагируют).
Чтобы увидеть реакцию на test в консоли, нужно написать примерно то, что я выше показал. Через echo или другую программу.

no avatar

Автор темы
ogankvik
Сообщения: 178
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 98 раз
Поблагодарили: 9 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#12

16 июл 2023, 14:30

slant, спасибо, переделал на test -d, работает!

Аватара пользователя

symon2014
Сообщения: 5936
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

Команда возвращающая ошибку при выполнении к несуществующей папке

#13

16 июл 2023, 14:34

ogankvik писал(а):
16 июл 2023, 14:30
slant, спасибо, переделал на test -d, работает!
Вот так метод тыка и понимание логики работы команд добавляет опыта))

Ответить

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя