препятствуйте тому, чтобы xargs вышел на ошибке

Я предполагаю, что драйвер Sqlite не может правильно заблокировать файл по SMB/CIFS следовательно проблемы.

Точно правильный, хотя это также эпидемии AFP и по-видимому характерно для определенных версий sqlite библиотеки. Adobe является постоянными преступниками когда дело доходит до чего-либо, чтобы сделать с сетевыми домами, и мы обошли это с методом символьной ссылки (обычно определенный предпочтительный каталог, а не отдельные файлы).

Это - довольно грязное решение, как это - только действительно фиксация для отдельных пользователей на отдельных машинах. Мы также стремились бы знать, придумал ли кто-то более изящный подход.

26
задан 11 July 2011 в 18:56
6 ответов

Вы могли перенести сценарий жемчуга с другим простым сценарием удара:

#!/bin/bash
real-command "$@" || exit 0

Это назовет реальную команду, передающую все это параметры, которые Вы передаете этой поддельной команде, и это будет всегда возвращать 0 кодов выхода (который означает, что это всегда успешно), и xargs никогда не будет останавливаться с этим.

12
ответ дан 28 November 2019 в 20:07

Вы могли записать свой xargs вызов для маскирования кодов возврата командных строк. С чем-то как следующее,xargs никогда не будет видеть возврат кодов выхода somecommand:

xargs sh -c "somecommand || :"
9
ответ дан 28 November 2019 в 20:07

Аналогично ответу larsks , но более явному:

xargs sh -c "somecommand || true"
22
ответ дан 28 November 2019 в 20:07

После моих строительных работ:

ls | xargs -I % svn upgrade %

Даже если svn-обновление не удалось на каком-то элементе, процесс продолжался

.
4
ответ дан 28 November 2019 в 20:07

Если вы использовали xargs с find , используйте вместо него параметр -exec для find :

find . -name '*.log' -exec somecommand {} \;
3
ответ дан 28 November 2019 в 20:07

Только что нашел забавный ответ на этот вопрос, хотя его полезность будет зависеть от команды, которую вы пытаетесь запустить.

Если вы используете xargs, чтобы собрать список команд , вы можете добиться такого поведения, указав xargs повторить команду, а затем подключившись к bash.

Например, если вы пытаетесь удалить список вещей, которые могут или не могут существовать:

# presume this will fail in a similar way to your command
cat things_to_delete | xargs -n1 delete_command_that_might_exit

# instead echo the commands and pipe to bash
cat things_to_delete | xargs -n1 echo delete_command_that_might_exit | bash

Это работает, потому что, во-первых, xargs всегда вызывает только echo, поэтому он не видит никаких ошибок. Затем, во-вторых, по умолчанию bash продолжает выполнение после неудачного оператора.

Чтобы быть более конкретным в моем случае, я использовал это для удаления нескольких старых версий приложений из AWS ElasticBeanstalk, например:

aws elasticbeanstalk describe-application-versions --application-name myapp |\
jq -r '.ApplicationVersions | sort_by(.DateCreated) | .[0:-10] | .[].VersionLabel' |\
xargs -n1 \
  echo aws elasticbeanstalk delete-application-version \
       --delete-source-bundle --application-name myapp --version-label |\
bash
6
ответ дан 28 November 2019 в 20:07

Теги

Похожие вопросы