Bash
是否有 POSIX shell 替代讀取 -e?
如何從通用(POSIX)外殼中實現(通過並在
read -e
中打開行編輯)的效果?我不想僅僅因為這個命令而失去 POSIX 兼容性。readline``bash
readline
是一個 GNU 項目(與 一起開發bash
)。還有其他替代方案,如 BSD libedit,所有 POSIX shell 都有自己的行編輯器,要麼特定於 shell,要麼基於至少實現vi
編輯模式的庫中的任何一個(POSIX 指定的唯一一個,儘管大多數也支持emacs
模式(POSIX 未指定,因為 RMS 反對))。然而,POSIX 只為 shell 命令行指定行編輯模式,而不是為
read
.
ksh93
確實支持它read
(前提是 stdin 和 stderr 在終端設備上)。在那裡,您可以執行以下操作:set -o emacs IFS= read -r 'line?prompt: '
zsh
等效於(vared
variable editor) 內置:line=; vared -p 'prompt: ' line
這是最豐富的功能,其歷史處理和鍵綁定和完成的完全定制。
read -e
是bash
具體的。IFS= read -rep 'prompt: ' variable
沒有 POSIX 等價物。POSIXly,您可以開始
vi
(由 POSIX 指定)編輯臨時文件並將該文件的內容讀入變數。或者,您可以尋找
zsh
/bash
/ksh93
或rlwrap
libreadline 周圍的其他包裝器之一的可用性,或者socat
(如果它已在readline
支持下建構)並使用其中任何一個(如果可用)來讀取該行或恢復為普通read
或vi
不可用。或者使用
LE
在這個類似的問答中看到的行編輯器功能,它實現了類似有限emacs
的行編輯器。