Если для команды проверить, успешно ли она

Set device = / dev / dsp Затем запустите темную сцену, используя: padsp darkice

padsp запускает указанную программу и перенаправляет ее доступ к совместимым звуковым устройствам OSS (/ dev / dsp и вспомогательным устройствам), чтобы звуковой сервер PulseAudio.

1
задан 18 February 2014 в 03:06

4 ответа

#!/bin/ksh
safeRunCommand() {
typeset cmnd="$*"
typeset ret_code

echo cmnd=$cmnd
eval $cmnd
ret_code=$?
if [ $ret_code != 0 ]; then
  printf "Error : [%d] when executing command: '$cmnd'" $ret_code
  exit $ret_code
fi
}

command="ls -l | grep p"
safeRunCommand "$command"

Источник: StackOverFlow

1
ответ дан 24 May 2018 в 11:42

Это было бы традиционным:

#!/bin/bash
pvcreate /dev/md5 || die "pvcreate failed"
vgcreate vg0 /dev/md5 || die "vgcreate failed"
lvcreate -L 200MB vg0 -n test || die "lvcreate failed"

Функция die - это то, что вам нужно будет определить, которое печатает сообщение об ошибке, а затем выходит. Пример реализации может быть

die() {
     echo $@ 1>&2   # print arguments of 'die' to standard error
     exit 1         # exit the script
}

. Когда вы сделаете это так, сценарий не будет выводить какой-либо вывод, если только что-то не сработает, и в этом случае он не будет идти дальше. Если вы хотите, чтобы он продолжал идти, даже если команда не удалась, удалите строку exit из реализации die.

Если вы хотите получить сообщение для каждой успешной команды, вы можете сделать это:

#!/bin/bash
if pvcreate /dev/md5; then
    echo "pvcreate succeeded"
else
    echo "pvcreate failed"
fi

и аналогично для двух других команд.

1
ответ дан 24 May 2018 в 11:42
#!/bin/bash
if pvcreate /dev/md5
then
  if vgcreate vg0 /dev/md5
  then
    lvcreate -L 200MB vg0 -n test
  fi
fi

Не тест. Но это должно работать.

Базовая структура if-else:

if condition
  then
    do somethin...
fi
1
ответ дан 24 May 2018 в 11:42
  • 1
    [ и ] являются НЕ частью синтаксиса if. [ - встроенная оболочка, псевдоним для test. Причина, по которой вы закончите ее с помощью ], - заставить ее выглядеть симметричной. См. mywiki.wooledge.org/BashFAQ/031 для получения дополнительной информации. ( Подсказка: Вы хотите просто if pvcreate /dev/md5 и т. д.) – nyuszika7h 18 February 2014 в 00:18
  • 2
    [pvcreate --- команда не найдена. Пожалуйста, отредактируйте или удалите этот ответ, это просто неправильно. – Rmano 18 February 2014 в 03:12
  • 3
    @ myuszika7h я удалил []. Был введен в спешке. – rechengehirn 18 February 2014 в 03:36

Если все команды зависят от предыдущего, вы можете использовать set -e:

#!/bin/bash
set -e

pvcreate /dev/md5
vgcreate vg0 /dev/md5
lvcreate -L 200MB vg0 -n test

Обратите внимание, что вышеизложенное выйдет без специального сообщения, при котором команда не удалась.

0
ответ дан 24 May 2018 в 11:42

Другие вопросы по тегам:

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