Bash (одна строка): Выполните 2-ю команду, если сначала успешно выполняется, выполнитесь 3-й, если она не делает?

согласно http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci можно сбросить отдельные функции устройства, если это поддерживается:

What:       /sys/bus/pci/devices/.../reset
Description:
            Some devices allow an individual function to be reset
            without affecting other functions in the same device.
            For devices that have this support, a file named reset
            will be present in sysfs.  Writing 1 to this file
            will perform reset.

6
14.07.2013, 21:38
2 ответа

Используя Ваш пример foo && bar || baz выполнится baz если bar или foo сбои. На основе Вашего описания, это не, что Вы хотите. Можно выполнить цель с помощью if оператор:

if foo; then
    bar
else
    baz
fi

Или если Вы хотите это на одной строке:

if foo; then bar; else baz; fi
12
27.01.2020, 20:22
  • 1
    На самом деле печать ошибки, если любой из двух сбоев мог бы быть лучше, теперь, когда я думаю о нем - благодарит заметить. Проблема я вижу с if оператор - то, что через команды, как предполагается, проходят SSH, и мне нужен он, чтобы быть одной строкой. Может это быть записанным как ssh user@host "if foo; then bar else baz fi"? –  rld. 14.07.2013, 21:56
  • 2
    @R3load. Для помещения его на одну строку необходимо заменить новые строки ;. Я поместил его на несколько строк для ясности. –  jordanm 14.07.2013, 22:00
  • 3
    я должен был попробовать его сам перед комментарием, изобразил его это слишком, спасибо все же. Принимая Ваш ответ, это, в чем я нуждаюсь. –  rld. 14.07.2013, 22:04

Полный синтаксис сценария оболочки доступен Вам в ssh команда. (Команды выполняются оболочкой удаленной учетной записи по умолчанию; мы предполагаем здесь, что это sh- совместимый.)

Команды Compund должны быть заключены в кавычки. В то время как Ваше использование двойных кавычек корректно, я рекомендовал бы одинарные кавычки, так как они защищают все специальные символы оболочки; это может быть важно, если Вы хотите использовать нетривиальные конструкции оболочки в своих удаленных командах.

С этим из пути вот один способ сделать то, что Вы хотите:

ssh user@host 'foo && bar || { echo foo failed >&2; baz; }'

Можно также использовать произвольно сложные условные выражения:

ssh user@host '
    if foo; then
         bar
    else
        echo foo failed >&2
        baz
    fi'

(Да, это - единственная, многострочная строка в одинарных кавычках.)

3
27.01.2020, 20:22
  • 1
    Один маленький глюк: Та последняя точка с запятой после 'baz' крайне важна. Необходимо, даже если существует только одна команда в фигурных скобках. –  ishmael 15.12.2014, 23:35

Теги

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