Zsh z read
jakiegoś powodu to echo ^M
zamiast akceptować je jako <Enter>
naciśnięcia klawiszy. (Jeśli -d
jest ustawiony, to są one rozpoznawane jako <Enter>
„ale”, ale nadal są powtarzane). Nie obsługuje również podstaw takich jak klawisz Backspace.
Mogę obejść ten problem, hakując / biegając bash
,
> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a
eat cake
ale zastanawiam się, czy istnieje lepszy sposób.
zsh
instalacji 4.3.10;% read a
działa dobrze tutaj.read
działa na komputerach z systemem Linux.Odpowiedzi:
Aby wygodnie wpisać wiersz tekstu pod Zsh, użyj
vared
. Używającvared
zamiastread
wywołuje ZLE , który jest równoważny do przechodzenia-e
bash na wywołanie readline.Zachowanie, które opisujesz zwykłym,
read
wygląda raczej na źle skonfigurowany terminal niż na problem z powłoką. Uruchom,stty -a
aby wyświetlić ustawienia terminala i upewnij się, żeeol
jest ustawiony na^M
ierase
ustawiony na to, co Backspacewysyła twój klucz. W zależności od systemu operacyjnego i jego konfiguracji oraz od terminala Backspacewysyła albo^H
lub^?
. Ustawienie backspace zwykle nie działa z powodu pliku konfiguracyjnego, który próbuje ustawić go ręcznie, więc pierwszą rzeczą, którą powinieneś zrobić, to śledzić i usuwać takie błędne konfiguracje. Jeśli nie znajdziesz, przejrzyj ustawienia emulatora terminali, aby sprawdzić, czy nie jest ustawiony jakiś historyczny tryb zgodności. Jeśli wszystko inne zawiedzie, dodaj coś takiego do~/.zshrc
:źródło
vared
wbudowanym. Okazuje się, żezshzle
strona podręcznika jest zdecydowanie warta przynajmniej przejrzenia.