chmod + тихий режим + как заставить код выхода 0 несмотря на ошибку


37

Возможно ли выполнить chmod и игнорировать ошибку из команды

Пример (примечание file.txt не существует, чтобы показать пример)

Когда я печатаю

chmod 777 file.txt

Я получаю ошибку на выходе

  chmod: cannot access file.txt : no such file or directory

Поэтому я добавляю флаг -f к команде следующим образом: (file.txt не существует, чтобы показать случай)

  chmod -f 777 file.txt
  echo $?
  1

Но из примера возвращаем chmod 1

Посоветуйте, пожалуйста, как заставить команду chmod выдавать код выхода 0 несмотря на ошибку


Почему это проголосовало? Подавить любой нежелательный вывод с помощью 2>/dev/nullи использовать set -eв сценариях.
ot--

Ответы:


48

Посоветуйте, пожалуйста, как заставить команду chmod выдавать код выхода 0 несмотря на ошибку

chmod -f 777 file.txt || :

Это выполнит :, то есть пустую команду, если chmodпотерпит неудачу. Поскольку команда null ничего не делает, но всегда завершается успешно, вы увидите код выхода 0.


25
Эквивалентным, но более читабельным для обычного пользователя является использованиеchmod -f 777 file.txt || true
orion

2
@orion Зависит. Если кто-то знаком, то :кажется одинаково читабельным.
devnull

2
Но если мы напишем более читаемый код, который могут читать нубы, как мы будем продолжать работать?
Ник Т

1
Разработчик шеф-повара здесь, просто опускаю некоторые ключевые слова, чтобы помочь другим, которые столкнулись с той же проблемой, что и я. shell_out! (cmd + '|| true') - это спасатель, когда вы пытаетесь быть идемпотентными с установками и вам нужно игнорировать shell_out! ошибки компиляции.
JackChance

54

chmod -f 777 file.txt || true

Так как это ИЛИ, если одно из утверждений возвращает true, тогда возвращаемое значение true. Это приводит к статусу выхода ноль.


3
Я добавил этот ответ в качестве альтернативы для продвижения практики написания читаемого кода.
Джерри

2
Правая ветвь ||не будет выполнена, если она chmodбудет успешной ... не то, чтобы она имела здесь большое значение для вычислений.
Даг

Спасибо тебе за это. Я не могу поверить, что я все испортил. :) Отредактировано с исправлением.
Джерри

5

Я всегда любила

 chmod -f 777 file.txt || exit 0

3
Это заставляет скрипт останавливаться, когда chmod был неудачным. Вопрос был в том, чтобы скрипт продолжал работать, когда с ним возникла проблема (игнорируйте ошибку).
Веда
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.