Исправлено !.
Предпринятые шаги
1.
root@localhost james]# umount -v /dev/sdf2
umount: /run/media/james (/dev/sdf2) unmounted
2.
cd /run/media/james
3.
мкдир МЕДИА
4.
vi /etc/fstab
5.
Отредактировал fstab с
/dev/sdf2 /run/media/james/MEDIA ntfs-3g defaults 0 0
6.
mount /dev/sdf2
Просто для записи, вот ответ на эту проблему (Usenet выиграл):
Консольные приложения, работающие внутри виртуальных терминальных приложений (xterm
, rxvt
и другие) получат SIGWINCH
после операции изменения размера. Таким образом, приложение сможет перерисовать окно и т.д. в соответствующем обработчике сигнала.
К сожалению, при использовании последовательной консоли такого механизма нет.
Однако возможно, что приложение будет активно запрашивать текущий размер окна консоли. Поэтому лучше всего делать это каждый раз, когда командная строка выводится оболочкой.
Этого можно достичь, сначала скомпилировав специальный исполняемый файл resize, а затем используя следующее в bashrc
:
if [ $(tty) == '/dev/ttyS0' ]; then
trap resize DEBUG
fi
Конечно, это не изменит настройки размера консоли в консольном приложении во время выполнения.
Вот еще одно решение, которое отлично сработало на моей встроенной Linux-системе (Overo под управлением Angstrom). Я просто запустил его из своего файла .bashrc. Я не хотел использовать resize, потому что это требует установки некоторых пакетов X, а я этого не хотел.
Сообщаем Raspberry Pi, что ваш терминал больше 24 строк | Shallow Thoughts Blog
Терминалы с изменяемым размером как таковые являются результатом NAWS ( Согласование размера окна
из RFC 1073 Telnet Параметр размера окна ).
Если вы подключены напрямую к компьютеру через последовательный порт, никаких согласований не требуется, и компьютер не имеет прямой информации о размере экрана вашего терминала.
Если терминал может согласовать размер, компьютер отправит SIGWINCH
приложениям, работающим в терминале, сообщая им обновить свое представление о размере экрана.
Когда компьютеру неизвестен размер экрана, он обычно устанавливает размер, показанный в stty -a
(строки и столбцы), равным нулю. Для интерактивного использования это немного недружелюбно, и некоторые системы используют переменные среды LINES
и COLUMNS
, чтобы помочь. Присвоенные значения могут быть получены из описания терминала; чаще они просто жестко запрограммированы. Соглашение для этих переменных требует, чтобы они действовали, если они явно не подавлены, например, в функции curses applications use_env
. С положительной стороны, эти переменные могут быть полезны при отсутствии достоверной информации. С другой стороны, нет удобного метода для изменения этих переменных.
Программа resize
(служебная программа, поставляемая с xterm
) может использовать escape-последовательность отчета о положении курсора в стиле VT100 для определения размера экрана. Это можно запустить из командной строки; (опять же) нет удобного способа сделать это автоматически. В качестве побочного эффекта resize
обновляет информацию о строках / столбцах, которую видит stty
. Его использование для предоставления обновленных переменных среды в основном полезно для таких случаев, как этот, где СТРОКИ
и СТРОКИ
установлены и должны быть обновлены.
Как и комментаторы, упомянутые до меня, нет альтернатива вызову resize
после каждой команды, если у вас нет этой команды и вы не хотите устанавливать пакет там, где он находится ( xterm
), вот две оболочки POSIX скрипт, который делает то же самое с использованием управляющих кодов терминала ANSI:
res() {
old=$(stty -g)
stty raw -echo min 0 time 5
printf '\0337\033[r\033[999;999H\033[6n\0338' > /dev/tty
IFS='[;R' read -r _ rows cols _ < /dev/tty
stty "$old"
# echo "cols:$cols"
# echo "rows:$rows"
stty cols "$cols" rows "$rows"
}
res2() {
old=$(stty -g)
stty raw -echo min 0 time 5
printf '\033[18t' > /dev/tty
IFS=';t' read -r _ rows cols _ < /dev/tty
stty "$old"
# echo "cols:$cols"
# echo "rows:$rows"
stty cols "$cols" rows "$rows"
}
res
основан на решении, представленном на https://wiki.archlinux.org/index.php/working_with_the_serial_console#Resizing_a_terminal . Это работает следующим образом:
res2
находится под влиянием resize.sh
из xterm (см. https://github.com/ThomasDickey/xterm-snapshots/blob/master/vttests/resize.sh ). Он использует специальный код xterm
для получения нужной нам информации (реализован во многих эмуляторах терминала), см .: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2 -Functions-using-CSI -_- order-by-the-final-character_s_ ( «Сообщать размер текстовой области в символах.» ).
Кстати, в моем .profile
вы найдете следующее:
[$ (tty) = / dev / ttyS0] && res
, чтобы размер терминала определялся для каждого войдите в систему через последовательную линию (ту, которую я использую для управления), например после перезагрузки устройства.
См. Также идею rsaw в комментариях, чтобы вместо нее была строка [$ (tty) = / dev / ttyS0] && trap res2 DEBUG
поэтому изменение размера выполняется после каждой команды (обратите внимание, что AFAIK это не всегда или не всегда возможно на busybox
).
Cuando se ejecuta una sesión de shell a través de una línea serie, basta con llamar al comando resize
dentro de esa sesión -después de establecer la conexión y después de cada cambio de geometría del terminal.
El comando resize
es parte de xterm pero no depende de X11. Por ejemplo, en Fedora se empaqueta por separado como xterm-resize
.
Cómo funciona :el comando de cambio de tamaño mide el alto/ancho a través de algunos movimientos del cursor y luego envía esos valores a la terminal a través de secuencias de escape.
Con un shell como zsh, esto también actualiza automáticamente las variables LINES
y COLUMNS
(alternativamente, uno puede evaluar las declaraciones de exportación que los comandos imprimen en stdout ).
Por qué esto es necesario :con una sesión local o ssh, el terminal puede señalar la sesión sobre cambios de geometría (cf. SIGWINCH ). Este mecanismo no funciona a través de una conexión en serie.
Вот простая и быстрая функция изменения размера, которая работает только для bash. Он модифицирован по сравнению с res2 phk, используя read -d delim
bash, чтобы не допустить завершения чтения по тайм-ауту.
resize() {
old=$(stty -g)
stty -echo
printf '\033[18t'
IFS=';' read -d t _ rows cols _
stty "$old"
stty cols "$cols" rows "$rows"
}
В то время как команда resize
работала для меня,(stty
манипуляции были ужасно медленными ), по-видимому, resize
в DEBUG
ловушка испортила каналы оболочки (, например.ls | sort -u
).
Вот решение, которое я в итоге использовал. Он запускается resize
после приглашения, но перед первой командой в канале.
Обратите внимание, что мы не можем просто поместить resize
в PROMPT_COMMAND
, потому что он запускается при выводе подсказки. То есть это не сработало для моего рабочего процесса на основе Vim "^Z
+ fg
" -.
.
^Z
(приостановить задание)PROMPT_COMMAND
выполняет и активирует хук DEBUG
. PROMPT_COMMAND
в одиночку. fg
или ls | cat
и нажмите Enter. DEBUG
ловушка срабатывает один раз и отключается до следующей подсказки. if [ "$(tty)" == /dev/ttyS0 ]; then
# Run resize only after prompt so that we don’t
# mess up pipes and other things.
debug_hook_resize() {
if [ -n "${debug_hook_prompt+x}" ]; then
unset debug_hook_prompt
resize >/dev/null
fi
}
prompt_hook_resize() {
debug_hook_prompt=
}
PROMPT_COMMAND=prompt_hook_resize
trap debug_hook_resize DEBUG
fi
Улучшение ответа Свена Геггуса:
This can be achieved by first compiling a special resize executable and then using the following in bashrc
Простое перенаправление вывода заставляет команду gnu resize
работать. Просто добавьте следующее в свой.bashrc
:
alias rsz='resize >/dev/null'
if [ $(tty) == '/dev/ttyS0' ]; then
trap rsz DEBUG
fi
Другими словами, вам не нужна специальная команда resize
.