Linux стрелки в консоли

Arrow keys, Home, End, tab-complete keys not working in shell

I have installed ubuntu minimal(mini.iso) on my vm. I then used recovery mode to login as root and create an account with useradd -m admin and then set a password with passwd admin . When I login on the new account, instead of the normal prompt I only see a $ sign. If I try to tab-complete a command or file name it prints a normal tab. If I try to use the arrow keys it prints ^[[A , ^[[B , ^[[C or ^[[D . Also, ls no longer adds colors. None of these problems were in recovery mode. How can I fix this?

The $ prompt is for a user. root’s prompt is #. The arrow keys do not work in terminal, you need to type in something like unity to run the Unity shell

@SimplySimon The up and down arrow keys are supposed to switch through previous commands, the left and right arrow keys are supposed to scroll through the current command, and tab should complete the command or file name. The path should be written to the left of the $.

9 Answers 9

That probably means that the new user account was created with /bin/sh as its login shell (which symlinks to the dash shell by default) instead of /bin/bash — you can change a user’s login shell with the ‘chsh’ command

or to change another user’s login shell (need to be root to do this obviously)

(you will need to start a new login session for the change to take effect). You may also need to copy the default .bashrc from /etc/skel to get things like the color prompt and default LS_COLORS .

In future you might want to use the ‘adduser’ command instead of ‘useradd’ — it sets up a more complete user environment including things like a default .profile and .bashrc — as well as setting the login shell to ‘bash’

Читайте также:  Linux mount all filesystems

Источник

Почему терминал отображает «^ [[A» «^ [[B» «^ [[C» «^ [[D» при нажатии клавиш со стрелками в Ubuntu?

Сначала я написал крошечную программу на Ansi C для Windows и скомпилировал ее в Ubuntu со встроенным GCC.

Но происходит нечто странное. Когда я пытаюсь переместить курсор, он печатает четыре символа:

  • нажатие Up печатает “ ^[[A “
  • нажатие Dn печатает “ ^[[B “
  • нажатие Rt печатает “ ^[[C “
  • нажатие Lt печатает “ ^[[D “

Потому что то, что клавиатура фактически отправляет на ПК (точнее, что терминал печатает для того, что он фактически получает с клавиатуры). bash , например, получает эти значения, расшифровывает их и понимает, что вы хотите перемещаться, поэтому он будет либо перемещать курсор (в случае левого/правого), либо использовать его историю для извлечения предыдущих команд (вверх/вниз). Таким образом, вы не можете ожидать, что ваша программа магически поддерживает клавиши со стрелками.

Однако, чтение со стандартного ввода с терминала уже поддерживает клавиши со стрелками влево/вправо (я полагаю, но я не сейчас в Linux, чтобы проверить и убедиться). Поэтому я предполагаю, что есть другая проблема. Одна из возможных причин может заключаться в том, что один из ваших ключей-модификаторов застрял? Возможно, ALT, CTRL или SUPER?

Для тех, кто идет из osx (mac), попробуйте изменить оболочки на bash

Terminal -> Preferences -> Shells open with -> [select] Command (complete path)

Просто введите $ bash в терминале. Это решит проблему.

Источник

Какую последовательность нужно передавать в консоль при нажатии стрелок?

При использовании консольных оболочек, например powershell или bash, при нажатии стрелок влево-вправо мы перемещаем курсор влево и вправо. А при нажатии стрелок вниз-вверх идет переключение по истории команд.

Проведя некоторые опыты, я понял, что все это делается самой консольной оболочкой. То есть, допустим если есть терминал Microsoft, который позволяет запустить тот-же powershell, то совсем не терминал хранит историю команд, а сам powershell. И не сам терминал ограничивает перемещение курсора по строке (не позволяя выйти курсору к промпту).

Читайте также:  Самые сложные дистрибутивы linux

Вот проблема в том, что я не понимаю, что терминал посылает при этом в powershell? Сейчас моя программа посылает в powershell при нажатии стрелок на клавиатуре CSI последовательности: CUD, CUF, CUU, CUD. По документации они производят перемещение курсора, что они на самом деле буквально и повторяют. (То есть перемещают курсор вниз и вверх, а не показывают историю команд. А так-же перемещают курсор влево и вправо, но без всяких ограничений, то есть курсор может уйти за границы введенной команды и зайти на промпт)

Поэтому мне кажется, что при нажатии этих стрелок, должны отправляться какие-то другие последовательности, то есть буквально, что нажата стрелка, а не вот одна из этих управляющих последовательностей, но я не понимаю как это сделать.

Судя по исходному коду терминала(строки 180 и 390) Microsoft, при нажатии стрелки вверх отправляется эта последовательность: \x1b[1;mA где m должно меняться в зависимости от нажатия ctrl, shift, alt. Если я понял правильно, то m без нажатия этих клавиш заменяется на 1, и тогда итоговая последовательность: \x1b[1;1A Но она фактически просто переводит курсор вверх, то есть почему-то не воспринимается как нажатие стрелки вверх. (не обрабатывает как в том-же терминале)

Простой 11 комментариев

Источник

Why don’t my arrow keys work in sh?

I recently installed Ubuntu and when I run sh on the Terminal my arrow keys don’t work so I can’t go through my call history or edit whatever I’m typing. It just comes out as weird characters like ^[[A . The login shell is bash and it works fine but as soon as I switch to sh , they don’t work. How can I fix this?

Thank you for the question! I wondered why I didn’t have any history, colors etc. in shell sessions on one server, and indeed I had a sh login shell . Oh my.

3 Answers 3

The /bin/sh (dash) shell is a POSIX compliant, reduced functionality shell to be more efficient (smaller) for booting the system. As part of that, history and advanced command-line editing are not included. It is more appropriate for strict POSIX scripting than as an interactive shell. The idea is that the ‘login’ shell would be bash by default, but the boot system would be using dash. The man page in Ubuntu 11.04 shows that dash has history and command-line editing, but the program does not have these features. Take a look at the size of the base executables.

$ ls -l /bin/*ash /bin/sh -rwxr-xr-x 1 root root 822420 Mar 31 15:26 /bin/bash -rwxr-xr-x 1 root root 83848 Nov 15 2010 /bin/dash lrwxrwxrwx 1 root root 4 May 17 21:15 /bin/rbash -> bash lrwxrwxrwx 1 root root 4 May 17 21:15 /bin/sh -> dash $ strings /bin/bash | egrep -ci 'fc|hist' 181 $ strings /bin/dash | egrep -ci 'fs|hist' 1 

Try to get used to running $SHELL or bash instead of just sh .

Читайте также:  Astra linux сетевой экран

Источник

How do I jump to the next or previous word with CTRL + arrow keys in a console?

In terminal emulation applications, pressing CTRL + Left / Right arrows jumps from one word to the previous or next one. Is it possible to have the same functionality in a Linux console, whether it is in text or in framebuffer modes? In my configuration, the CTRL + arrow keys are transformed into escaped character sequences and not interpreted.

7 Answers 7

Emacs-style shortcuts Alt + f , Alt + b work by default with all readline-powered command line programs, like shells.

This is possible if and only if the terminal sends different escape sequences for Ctrl + Left vs Left . This is not the case by default on the Linux console (at least on my machine). You can make it so by modifying the keymap. The exact file to modify may depend on your distribution; on Debian lenny, the file to modify is /etc/console/boottime.kmap.gz . You need lines like

control keycode 105 = F100 string F100 = "\033O5D" control keycode 106 = F101 string F101 = "\033O5C" 

You might as well choose the same escape sequences as your X terminal emulator. To find out what the control sequence is, type Ctrl + V Ctrl + Left in a shell; this inserts (on my machine) ^[O5D where ^[ is an escape character. In the keymap file, \033 represents an escape character.

Configuring the application in the terminal to decode the escape sequence is a separate problem, .

Источник

Оцените статью
Adblock
detector