Я использовал alien для конвертации RPM в .deb. Я НЕ использовал скрипт конвертации alien; я конвертирую вручную. Действительно, скрипт блевал на какой-то несовместимый синтаксис. Мой вопрос НЕ о том, как исправить эту несовместимость, а скорее о том, как скрипт продолжает успешно выполняться, несмотря на обнаружение ошибки.
Вот проблемный раздел:
if [ "`/bin/echo '\c'`" == "" ]; then
ECHO_ESC="/bin/echo"
else
ECHO_ESC="/bin/echo -e"
fi
Это приводит к следующей «ошибке»:
./avsetup_mcc: 11: [: \c: unexpected operator
Несмотря на это, сценарий продолжает выполняться идеально. Так что же здесь происходит?
решение1
[
не является "специальной встроенной функцией", и согласноPOSIXнеспециальной Utility syntax error (option or operand error)
встроенной Shall not exit
неинтерактивной оболочки («скрипта»).
Так же, как и то, почему оболочка не выходит. Скрипт функционирует отлично, потому что ECHO_ESC
настроен на что-то разумное, независимо от того, как if
ветви.
В отличие от сообщения об ошибке, ошибка возникает не из-за , \c
а из-за ==
, с которым недопустимо использовать [
(равенство строк проверяется с помощью одного =
), но оболочки, которые поддерживают [[
(который поддерживает ==
), похоже, допускают ==
даже запись с одной скобкой (например bash
, ksh
). Обратите внимание, что приведенный выше код ненетошибка в bash, поэтому вам, возможно, стоит подумать о переименовании вашего вопроса.