chmod + silent mode + як змусити код виходу 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 return 1

Будь ласка, поради, як змусити команду chmod давати вихідний код 0, незважаючи на помилку


Чому це схвалено? Придушіть будь-який небажаний вихід 2>/dev/nullта використовуйте його set -eв сценаріях.
ott--

Відповіді:


47

Будь ласка, поради, як змусити команду 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

Оскільки це АБО, якщо одне з тверджень повертає істину, то повернення відповідає істині. Це призводить до нульового статусу виходу.


3
Цю відповідь я додав як альтернативу для просування практики написання читаного коду.
Геррі

2
Права гілка ||не буде виконана, якщо chmodвона успішна ... не те, що тут велика різниця в обчисленні.
даг

Дякую тобі за це. Я не можу повірити, що я це зіпсував. :) Відредаговано з виправленням.
Джеррі

5

Я завжди любив

 chmod -f 777 file.txt || exit 0

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