- метки
и - Параметры -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 первым реализовал эту функцию, используя последнее имя).
Попробуйте использовать официальный синтаксис и используйте [
.... ]
для вызовов test
.
(... )
создает вспомогательную -оболочку
(( ))
— внутреннее арифметическое выражение, специфичное для ksh, которому нравятся числа вместо-u
Ошибка здесь:
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"