Bash

是否有 POSIX shell 替代讀取 -e?

  • March 25, 2019

如何從通用(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等效於( varedvariable editor) 內置:

line=; vared -p 'prompt: ' line

這是最豐富的功能,其歷史處理和鍵綁定和完成的完全定制。

read -ebash具體的。

IFS= read -rep 'prompt: ' variable

沒有 POSIX 等價物。POSIXly,您可以開始vi(由 POSIX 指定)編輯臨時文件並將該文件的內容讀入變數。

或者,您可以尋找zsh/ bash/ksh93rlwraplibreadline 周圍的其他包裝器之一的可用性,或者socat(如果它已在readline支持下建構)並使用其中任何一個(如果可用)來讀取該行或恢復為普通readvi不可用。

或者使用LE在這個類似的問答中看到的行編輯器功能,它實現了類似有限emacs的行編輯器。

引用自:https://unix.stackexchange.com/questions/399930