Это - ожидаемое поведение и уже обсуждало несколько раз.
Скрипт запущен в подоболочке и не может изменить родительскую оболочку рабочий каталог. Его эффекты потеряны, когда это заканчивается.
Для изменения каталога постоянно, необходимо получить сценарий, как в
. ./script
Терминалы только понимают символы, не ключи. Так al функциональные клавиши кодируются как последовательности символов, с помощью управляющих символов. Кроме нескольких общих, которые имеют связанный управляющий символ (Вкладка Ctrl+I
, Войдите Ctrl+M
, Esc Ctrl+[
), функциональные клавиши отправляют escape-последовательности, начинаясь Ctrl+[ [
или Ctrl+[ O
. Можно использовать tput
команда для наблюдения то, что приложения escape-последовательности ожидают для каждой функциональной клавиши на терминале. Эти последовательности хранятся в terminfo
база данных. Например, отрывок оболочки ниже показывает escape-последовательности, соответствующие каждой функциональной клавише.
$ for x in {1..12}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
F1 ^[OP
F2 ^[OQ
F3 ^[OR
F4 ^[OS
F5 ^[[15~
F6 ^[[17~
F7 ^[[18~
F8 ^[[19~
F9 ^[[20~
F10 ^[[21~
F11 ^[[23~
F12 ^[[24~
Другой способ видеть escape-последовательность для функциональной клавиши состоит в том, чтобы нажать Ctrl+V в терминальном приложении, которое не снова переплетает ключ Ctrl+V (такой как оболочка). Ctrl+V вставляет следующий символ (который будет символом ESC), буквально, и Вы сможете видеть остальную часть последовательности, которая состоит из обычных символов.
Так как последовательности может быть неудобно ввести, действительно исследуйте изменение привязок клавиш в Вашем приложении или использования другого эмулятора терминала. Кроме того, обратите внимание, что у Вас может быть ограничение по времени: некоторые приложения только распознают escape-последовательности, если они входят достаточно быстро, так, чтобы они могли дать значение одной только клавише Esc.
Эмулятор терминала Android Jack Palevich использует сочетания клавиш с кнопками громкости для отправки множества ключей, включая функциональные клавиши. Существует также Клавиатура Хакера, которая имеет каждый ключ, доступный, который имела бы реальная клавиатура.
Как предлагает Дрейк Кларрис, на Android можно установить альтернативные клавиатуры, такие как Hacker's Keyboard , включающие клавиши F -.
Однако, если по какой-либо причине вы не можете установить новую клавиатуру, есть другие альтернативы, если ваше терминальное приложение позволяет вам нажимать Esc
и/или Alt
.
Часто можно использовать Esc
, а затем Number
или Alt+Number
для имитации F1
-F10
, используя 0
для F10
.
Эти сочетания клавиш очень полезны при использовании эмулятора терминала на телефоне или другом ограниченном устройстве, на котором отсутствуют физические клавиши F -. Они также полезны с физической клавиатурой, когда ваша терминальная программа или другая программа, работающая в том же сеансе (, например, byobu/screen/tmux ), перехватывает клавиши F -для своих целей.
Пример сEsc
:Я хочу нажать F10
, чтобы выйти из mc
, Midnight Commander, но Gnome Terminal перехватывает F10
и интерпретирует его как свою клавишу меню. Вместо этого я нажимаю Esc
, затем 0
. Терминал Gnome передает входные данные отдельно, mc
интерпретирует их как F10
и mc
завершает работу.
Пример сAlt
:Я хочу нажать F4
, чтобы отфильтровать htop
, но byobu
перехватывает F4
и интерпретирует его как "следующее окно". Вместо этого я удерживаю Alt
и нажимаю 4
. Byobu передает комбинацию клавиш, htop
интерпретирует ее как F4
и включает фильтрацию.
Метод Alt
может не работать, если приложение интерпретирует Alt+Number
как комбинацию клавиш, отличную от F-Number
. На практике с этой проблемой не сталкивался.
Я не знаю, есть ли способ набрать F11
или F12
таким образом, поскольку мне это никогда не требовалось.