Запуск 2-й команды в качестве запасного варианта с теми же аргументами, что и у 1-й команды

Вы можете использовать фильтр:

git config filter.dropSecondLine.clean "sed '2d'"

Отредактируйте/создайте.git/info/attributes и добавьте:

* filter=dropSecondLine

Если вы не хотите, чтобы фильтр действовал на все файлы в репозитории, измените *, чтобы он соответствовал соответствующему шаблону или имени файла.

В результате рабочий каталог останется прежним, но у больших двоичных объектов репо не будет второй строки в файлах. Поэтому, если вы потянете его в другом месте, вторая строка не появится (результат sed 'd2' ). И если вы измените вторую строку вашего файла журнала, вы сможете добавить ее, но не зафиксировать, так как изменение большого двоичного объекта происходит при добавлении, и в этот момент это будет тот же файл, что и в репо.

0
19.09.2021, 22:04
1 ответ

Can I call gtar first, and then tar as a fallback, as a one-liner, writing the arguments only once?

Чтобы ответить на этот вопрос :, это можно сделать как простую реализацию хранения аргументов в массиве. (Баш/кш/зш. См. Как запустить команду, хранящуюся в переменной? для решения проблем и обходного решения, совместимого с POSIX -.)

args=(--sort=name --owner=root:0 --group=root:0 --mtime='UTC 2020-01-01' -cvf api.tar api)
if ! tar "${args[@]}"; then
    echo "using 'tar' failed, retrying with 'gtar'" >&1
    gtar "${args[@]}"
fi

или в виде одного -вкладыша, если вы настаиваете:

tar "${args[@]}" || gtar "${args[@]}"

Хотя это не говорит , почему это не удалось, и попытается повторить попытку с другим tar, даже если проблема в чем-то вроде -недоступного каталога.

Другим вариантом может быть повторный запуск команды только в том случае, если первая ошибка «команда не найдена». В этом случае оболочки обычно устанавливают $?на 127. Конечно, для этого нужно сначала перевернуть gtar, так как tar, вероятно, существует в той или иной форме.

gtar "${args[@]}"
ret=$?
if [ "$ret" = 127 ]; then
    tar "${args[@]}"
    ret=$?
fi

Тест [ "$? = 127 ]уничтожает значение $?, поэтому при необходимости добавляется дополнительная переменная для хранения фактического статуса выхода.

В конкретном случае с двумя тарами ответ Кусалананды о предварительной проверке также является хорошим решением.

1
20.09.2021, 11:48

Теги

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