Функция Bash, если затем возвращает команду не найден

- метки и - Параметры -ok-button должны идти перед параметром - меню .Они изменяют поведение виджета меню .

Документация для whiptail требует некоторой доработки. Вы можете найти справочную страницу для диалога полезной: я вижу из strings / usr / bin / whiptail , что whiptail имеет - notags ], но он не описан на странице руководства whiptail . В диалоговом окне:

   --no-tags
          Some  widgets  (checklist, inputmenu, radiolist, menu) display a
          list with two columns (a "tag" and "description").  The  tag  is
          useful  for scripting, but may not help the user.  The --no-tags
          option (from Xdialog) may be used to suppress the column of tags
          from  the  display.  Unlike the --no-items option, this does not
          affect the data which is read from the script

диалоговое окно отображает - теги в -no-tags ( Xdialog первым реализовал эту функцию, используя последнее имя).

-1
01.11.2018, 16:22
2 ответа

Попробуйте использовать официальный синтаксис и используйте [.... ]для вызовов test.

  • (... )создает вспомогательную -оболочку

  • (( ))— внутреннее арифметическое выражение, специфичное для ksh, которому нравятся числа вместо-u

0
28.01.2020, 05:07

Ошибка здесь:

if ( a == "-u" ); then
    echo "This means upload"
else
    echo "This means download"
fi

Конструкция ifожидает выражение, которое может быть оценено как истинное или ложное. Так, например, команда(if ls; then echo yes;fi)или тестовая конструкция. Вы хотите использовать тестовую конструкцию, но не используете тестовый оператор ([), вы используете круглые скобки.

Скобки просто открывают подоболочку. Следовательно, выражение ( a == "-u" )просто означает «запустить команду aс аргументами ==и "-u"в подоболочке. Вам нужно:

if [ "$a" = "-u" ]; then  ## you also need the $ here
    echo "This means upload"
else
    echo "This means download"
fi

Или, если вы хотите использовать не -переносимую конструкцию [[ ]], которая работает в bash, вам нужен пробел после[[:

if [[ "$a" == "-u" ]]; then
    echo "This means upload"
else
    echo "This means download"
fi

Вы попытались выполнить if [[a == "-u" ]], поэтому оболочка прочитала [[aкак единую команду и потерпела неудачу.

Наконец, конструкция (( )), которая опять же не является переносимой, но работает в bash (и некоторых других оболочках ), используется для арифметических вычислений. Изman bash:

  ((expression))
          The  expression is evaluated according to the rules described below under
          ARITHMETIC EVALUATION.  If the value of the expression is  non-zero,  the
          return  status  is  0; otherwise the return status is 1.  This is exactly
          equivalent to let "expression".

Так что это не то, что вы хотели бы использовать в данном контексте. Собрав все это вместе, вы хотите что-то вроде этого:

function test_func {
    local a="$1"

    if [ "$a" = "-u" ]; then
        echo "This means upload"
    else
        echo "This means download"
    fi
}

alias test-function="test_func"
3
28.01.2020, 05:07

Теги

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