Попробуйте просто сказать первому хосту выполнить команду ssh
вместо того, чтобы давать вам оболочку:
ssh -t -i private_key.pem ec2-user@ec2-11-11-111-11.us-west-2.compute.amazonaws.com ssh -t second_aws
С помощью этого кода я не могу воспроизвести описанное вами поведение. После foo -c
, если я нажму вкладку , предлагаемые дополнения - это каталоги.
Обратите внимание, что когда вы используете состояния с _arguments
, вы должны объявить используемые им переменные как локальные переменные в функции. Я не думаю, что в этом простом случае это имеет значение, если нет глобальных переменных с таким же именем.
Я не думаю, что есть способ указать поведение для всех аргументов, начинающихся с -
. Чтобы отключить завершение, если есть нераспознанный параметр, я не могу придумать лучшего способа, чем перебирать аргументы, то есть элементыwords
между 1 (именем команды, эксклюзивное )и$CURRENT
(слово завершается, исключительный ).
local context state state_descr line
typeset -A opt_args
_arguments : \
'-l' \
'*: :->directory'
local i
for ((i = 2; i < CURRENT; i++)); do
if [[ $words[$i] = -* && $words[$i] != -l ]]; then
state=nothing
break
fi
done
case $state in
directory)
_directories -W /usr
;;
esac