Using shell's read command with live editing functionality (readline like)Is there a POSIX shell alternative to read -e?Read and process a string, char by char, yet allow user to simple line edit the inputarrow keys for line editing during zsh read builtinHow to read 'n' into variable with Bash's built-in command?measure amount of data read from /dev/randomUsing sed with herestring (<<<) and read -aUsing bind to read the current command lineHow can I setup a hybrid readline with emacs insert mode and vi command mode?readline: How do I change keymaps from `emacs` to `vi-command` with a binding?serial port via minicom: can minicom use line-editing (i.e. readline functionality)?Assignments are like commands with an exit status except when there's command substitution?Line editing (readline?) with virtual keysread command with ??? input
Tiptoe or tiphoof? Adjusting words to better fit fantasy races
Using parameter substitution on a Bash array
Cynical novel that describes an America ruled by the media, arms manufacturers, and ethnic figureheads
Why Were Madagascar and New Zealand Discovered So Late?
How does a character multiclassing into warlock get a focus?
How do I rename a LINUX host without needing to reboot for the rename to take effect?
Mapping a list into a phase plot
Should my PhD thesis be submitted under my legal name?
How does residential electricity work?
Can I convert a rim brake wheel to a disc brake wheel?
Irreducibility of a simple polynomial
Finding all intervals that match predicate in vector
Failed to fetch jessie backports repository
Will it be accepted, if there is no ''Main Character" stereotype?
Why are on-board computers allowed to change controls without notifying the pilots?
when is out of tune ok?
Is a roofing delivery truck likely to crack my driveway slab?
Is the destination of a commercial flight important for the pilot?
apt-get update is failing in debian
What is the opposite of 'gravitas'?
Displaying the order of the columns of a table
What's the purpose of "true" in bash "if sudo true; then"
Best way to store options for panels
Modify casing of marked letters
Using shell's read command with live editing functionality (readline like)
Is there a POSIX shell alternative to read -e?Read and process a string, char by char, yet allow user to simple line edit the inputarrow keys for line editing during zsh read builtinHow to read 'n' into variable with Bash's built-in command?measure amount of data read from /dev/randomUsing sed with herestring (<<<) and read -aUsing bind to read the current command lineHow can I setup a hybrid readline with emacs insert mode and vi command mode?readline: How do I change keymaps from `emacs` to `vi-command` with a binding?serial port via minicom: can minicom use line-editing (i.e. readline functionality)?Assignments are like commands with an exit status except when there's command substitution?Line editing (readline?) with virtual keysread command with ??? input
Is there a standard (POSIX) way of asking the user some data from within a shell script, with read for example, while allowing live edition of the text being typed (what readline does)?
I know bash has read -e varname that allows for the person launching the script to use keyboard arrows for exemple, to edit or correct what has just been typed without deleting the last entered characters with backspace.
However, read -e is bash specific. And still, it is pretty cumbersome to delete all that has been wrote if you realise you made a mistake at the beginning of your long sentence...
bash shell posix readline
add a comment |
Is there a standard (POSIX) way of asking the user some data from within a shell script, with read for example, while allowing live edition of the text being typed (what readline does)?
I know bash has read -e varname that allows for the person launching the script to use keyboard arrows for exemple, to edit or correct what has just been typed without deleting the last entered characters with backspace.
However, read -e is bash specific. And still, it is pretty cumbersome to delete all that has been wrote if you realise you made a mistake at the beginning of your long sentence...
bash shell posix readline
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39
add a comment |
Is there a standard (POSIX) way of asking the user some data from within a shell script, with read for example, while allowing live edition of the text being typed (what readline does)?
I know bash has read -e varname that allows for the person launching the script to use keyboard arrows for exemple, to edit or correct what has just been typed without deleting the last entered characters with backspace.
However, read -e is bash specific. And still, it is pretty cumbersome to delete all that has been wrote if you realise you made a mistake at the beginning of your long sentence...
bash shell posix readline
Is there a standard (POSIX) way of asking the user some data from within a shell script, with read for example, while allowing live edition of the text being typed (what readline does)?
I know bash has read -e varname that allows for the person launching the script to use keyboard arrows for exemple, to edit or correct what has just been typed without deleting the last entered characters with backspace.
However, read -e is bash specific. And still, it is pretty cumbersome to delete all that has been wrote if you realise you made a mistake at the beginning of your long sentence...
bash shell posix readline
bash shell posix readline
edited Feb 3 '14 at 18:04
Totor
asked Feb 2 '14 at 3:09
TotorTotor
8,737135181
8,737135181
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39
add a comment |
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39
add a comment |
1 Answer
1
active
oldest
votes
The terminal driver does have line editing capabilities on most systems. You'll notice that you can use Backspace, Ctrl-U, sometimes Ctrl-W.
readline is a GNU library maintained alongside bash. There's nothing POSIX about it. POSIX defines an optional line editor (with vi key binding) for sh, but no provision to use it outside of sh.
The ksh93 shell uses that vi-style line editor (also supports emacs or gmacs-style) for its read builtin when both stdin and stderr are a terminal and the corresponding option has been set: set -o emacs; IFS= read -r var for instance for read to use an emacs-style line-editor.
POSIX does specify the vi editor though (optional), so you could invoke vi to edit the content of a temporary file.
The zsh equivalent of bash's read -e is vared (a lot more advanced as it's using zsh's zle (zsh line editor)).
In other shells, you can use some wrappers around readline or other line-editing libraries (like rlwrap), or you can invoke bash -c 'read -e...' or zsh -c 'vared...'.
What you could also do is give the opportunity to the user to launch an editor.
Like:
if ! IFS= read -r var; then
if [ -n "$var" ]; then
tmp=$(create_tempfile) # create_tempfile left as an exercise
printf '%sn' "$var" > "$tmp"
"$VISUAL:-$EDITOR:-vi" -- "$tmp"
var=$(cat < "$tmp")
rm -f -- "$tmp"
else
exit 1 # real EOF?
fi
fi
Then the user can press Ctrl-D twice to launch an editor on what he has already entered.
Otherwise, I once wrote that function that should work on most terminals on most Unices that implements a simple line editor.
LE() od -vAn -to1); do
while [ "$#" -gt 0 ]; do
LE_k=$1
shift
if [ "$LE_k" = 033 ]; then
case "$1$2$3" in
133103*
To be used as:
LE 'Prompt: '
Or:
LE 'Prompt: [....]bbbbb' 4 . DEF
if you want a maximum length and/or different filling character and/or an initial value.
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f112109%2fusing-shells-read-command-with-live-editing-functionality-readline-like%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The terminal driver does have line editing capabilities on most systems. You'll notice that you can use Backspace, Ctrl-U, sometimes Ctrl-W.
readline is a GNU library maintained alongside bash. There's nothing POSIX about it. POSIX defines an optional line editor (with vi key binding) for sh, but no provision to use it outside of sh.
The ksh93 shell uses that vi-style line editor (also supports emacs or gmacs-style) for its read builtin when both stdin and stderr are a terminal and the corresponding option has been set: set -o emacs; IFS= read -r var for instance for read to use an emacs-style line-editor.
POSIX does specify the vi editor though (optional), so you could invoke vi to edit the content of a temporary file.
The zsh equivalent of bash's read -e is vared (a lot more advanced as it's using zsh's zle (zsh line editor)).
In other shells, you can use some wrappers around readline or other line-editing libraries (like rlwrap), or you can invoke bash -c 'read -e...' or zsh -c 'vared...'.
What you could also do is give the opportunity to the user to launch an editor.
Like:
if ! IFS= read -r var; then
if [ -n "$var" ]; then
tmp=$(create_tempfile) # create_tempfile left as an exercise
printf '%sn' "$var" > "$tmp"
"$VISUAL:-$EDITOR:-vi" -- "$tmp"
var=$(cat < "$tmp")
rm -f -- "$tmp"
else
exit 1 # real EOF?
fi
fi
Then the user can press Ctrl-D twice to launch an editor on what he has already entered.
Otherwise, I once wrote that function that should work on most terminals on most Unices that implements a simple line editor.
LE() od -vAn -to1); do
while [ "$#" -gt 0 ]; do
LE_k=$1
shift
if [ "$LE_k" = 033 ]; then
case "$1$2$3" in
133103*
To be used as:
LE 'Prompt: '
Or:
LE 'Prompt: [....]bbbbb' 4 . DEF
if you want a maximum length and/or different filling character and/or an initial value.
add a comment |
The terminal driver does have line editing capabilities on most systems. You'll notice that you can use Backspace, Ctrl-U, sometimes Ctrl-W.
readline is a GNU library maintained alongside bash. There's nothing POSIX about it. POSIX defines an optional line editor (with vi key binding) for sh, but no provision to use it outside of sh.
The ksh93 shell uses that vi-style line editor (also supports emacs or gmacs-style) for its read builtin when both stdin and stderr are a terminal and the corresponding option has been set: set -o emacs; IFS= read -r var for instance for read to use an emacs-style line-editor.
POSIX does specify the vi editor though (optional), so you could invoke vi to edit the content of a temporary file.
The zsh equivalent of bash's read -e is vared (a lot more advanced as it's using zsh's zle (zsh line editor)).
In other shells, you can use some wrappers around readline or other line-editing libraries (like rlwrap), or you can invoke bash -c 'read -e...' or zsh -c 'vared...'.
What you could also do is give the opportunity to the user to launch an editor.
Like:
if ! IFS= read -r var; then
if [ -n "$var" ]; then
tmp=$(create_tempfile) # create_tempfile left as an exercise
printf '%sn' "$var" > "$tmp"
"$VISUAL:-$EDITOR:-vi" -- "$tmp"
var=$(cat < "$tmp")
rm -f -- "$tmp"
else
exit 1 # real EOF?
fi
fi
Then the user can press Ctrl-D twice to launch an editor on what he has already entered.
Otherwise, I once wrote that function that should work on most terminals on most Unices that implements a simple line editor.
LE() od -vAn -to1); do
while [ "$#" -gt 0 ]; do
LE_k=$1
shift
if [ "$LE_k" = 033 ]; then
case "$1$2$3" in
133103*
To be used as:
LE 'Prompt: '
Or:
LE 'Prompt: [....]bbbbb' 4 . DEF
if you want a maximum length and/or different filling character and/or an initial value.
add a comment |
The terminal driver does have line editing capabilities on most systems. You'll notice that you can use Backspace, Ctrl-U, sometimes Ctrl-W.
readline is a GNU library maintained alongside bash. There's nothing POSIX about it. POSIX defines an optional line editor (with vi key binding) for sh, but no provision to use it outside of sh.
The ksh93 shell uses that vi-style line editor (also supports emacs or gmacs-style) for its read builtin when both stdin and stderr are a terminal and the corresponding option has been set: set -o emacs; IFS= read -r var for instance for read to use an emacs-style line-editor.
POSIX does specify the vi editor though (optional), so you could invoke vi to edit the content of a temporary file.
The zsh equivalent of bash's read -e is vared (a lot more advanced as it's using zsh's zle (zsh line editor)).
In other shells, you can use some wrappers around readline or other line-editing libraries (like rlwrap), or you can invoke bash -c 'read -e...' or zsh -c 'vared...'.
What you could also do is give the opportunity to the user to launch an editor.
Like:
if ! IFS= read -r var; then
if [ -n "$var" ]; then
tmp=$(create_tempfile) # create_tempfile left as an exercise
printf '%sn' "$var" > "$tmp"
"$VISUAL:-$EDITOR:-vi" -- "$tmp"
var=$(cat < "$tmp")
rm -f -- "$tmp"
else
exit 1 # real EOF?
fi
fi
Then the user can press Ctrl-D twice to launch an editor on what he has already entered.
Otherwise, I once wrote that function that should work on most terminals on most Unices that implements a simple line editor.
LE() od -vAn -to1); do
while [ "$#" -gt 0 ]; do
LE_k=$1
shift
if [ "$LE_k" = 033 ]; then
case "$1$2$3" in
133103*
To be used as:
LE 'Prompt: '
Or:
LE 'Prompt: [....]bbbbb' 4 . DEF
if you want a maximum length and/or different filling character and/or an initial value.
The terminal driver does have line editing capabilities on most systems. You'll notice that you can use Backspace, Ctrl-U, sometimes Ctrl-W.
readline is a GNU library maintained alongside bash. There's nothing POSIX about it. POSIX defines an optional line editor (with vi key binding) for sh, but no provision to use it outside of sh.
The ksh93 shell uses that vi-style line editor (also supports emacs or gmacs-style) for its read builtin when both stdin and stderr are a terminal and the corresponding option has been set: set -o emacs; IFS= read -r var for instance for read to use an emacs-style line-editor.
POSIX does specify the vi editor though (optional), so you could invoke vi to edit the content of a temporary file.
The zsh equivalent of bash's read -e is vared (a lot more advanced as it's using zsh's zle (zsh line editor)).
In other shells, you can use some wrappers around readline or other line-editing libraries (like rlwrap), or you can invoke bash -c 'read -e...' or zsh -c 'vared...'.
What you could also do is give the opportunity to the user to launch an editor.
Like:
if ! IFS= read -r var; then
if [ -n "$var" ]; then
tmp=$(create_tempfile) # create_tempfile left as an exercise
printf '%sn' "$var" > "$tmp"
"$VISUAL:-$EDITOR:-vi" -- "$tmp"
var=$(cat < "$tmp")
rm -f -- "$tmp"
else
exit 1 # real EOF?
fi
fi
Then the user can press Ctrl-D twice to launch an editor on what he has already entered.
Otherwise, I once wrote that function that should work on most terminals on most Unices that implements a simple line editor.
LE() od -vAn -to1); do
while [ "$#" -gt 0 ]; do
LE_k=$1
shift
if [ "$LE_k" = 033 ]; then
case "$1$2$3" in
133103*
To be used as:
LE 'Prompt: '
Or:
LE 'Prompt: [....]bbbbb' 4 . DEF
if you want a maximum length and/or different filling character and/or an initial value.
edited yesterday
answered Feb 4 '14 at 11:57
Stéphane ChazelasStéphane Chazelas
311k57587945
311k57587945
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f112109%2fusing-shells-read-command-with-live-editing-functionality-readline-like%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-bash, posix, readline, shell
My sense is that the best way to do this and be POSIX compliant is to implement a subset of readline using the curses interface. Here's a POSIX link: pubs.opengroup.org/onlinepubs/7990989775/xcurses/curses.h.html
– samiam
Feb 2 '14 at 3:18
Similar question already discussed here: unix.stackexchange.com/questions/18334/…, esp. unix.stackexchange.com/a/24207.
– user58503
Feb 3 '14 at 19:39