использование чтения в выражении if - удар

DVD обычно шифруются, и необходимо установить специальный кодек для чтения их.

apt-get install libdvdcss2 

Этот пакет должен добиться цели.

2
19.02.2012, 19:09
2 ответа

Вам не нужно [[ ... ]]. Просто перепишите его как:

#!/bin/bash

if read -t 10 -sp "Enter Password: " passwd; then
  echo -e "\nPassword: ${passwd}"
else
  echo -e "\nInput timed out" >&2
  exit 1
fi

exit 0

или быть легче читать и/или короче:

#!/bin/bash
read -t 10 -sp "Enter Password: " passwd || echo -e "\nInput timed out" >&2 && exit 1
echo -e "\nPassword: ${passwd}"
exit 0

Обновление:

Понять, почему это работает без [[ ... ]], человек удара должен быть проверен:

если список; затем список; [список elif; затем список;]... [еще перечисляют;] fi

Если список выполняется. Если его статус выхода является нулем, тогдашний список выполняется. Иначе каждый список elif выполняется в свою очередь, [...]

В этом случае, if list команда чтения. [ $? -eq 0 ] и test $? -eq 0 также действительные списки с определенным статусом выхода. [[ expression ]] (снова по словам человека удара), также действительный список, но read -t 10 -sp "Enter Password: " passwd не допустимое выражение. Посмотрите человека для знания то, что является допустимыми выражениями.

4
27.01.2020, 21:55
  • 1
    мог Вы объяснять, почему он работает без [[ ... ]]? уверенный –  Majid Azimi 19.02.2012, 20:14
  • 2
    , я редактирую ответ. –  jfg956 19.02.2012, 20:27

Вы используете команду в [[ ]] оператор, который не имеет никакого смысла. Этот оператор должен использоваться как test функция для проверки некоторого условия.

Лучше работать read управляйте отдельно и проверьте, что это - код выхода затем.

#!/bin/bash

read -t 10 -sp "Enter Password: " passwd

if [ $? -eq 0 ]; then
    echo -e "\nPassword: ${passwd}"
else
    echo -e "\nInput timed out" >&2
    exit 1
fi

exit 0
2
27.01.2020, 21:55

Теги

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