Red Hat Bugzilla – Bug 21222
set -o vi not working for non-root users
Last modified: 2007-04-18 12:29:58 EDT
bash is only allowing root to invoke vi-style command-line editing. When
non-root users try to invoke it, the shell acts as though it hasn't been
set. set -o vi is accepted and processed without error. A followup set -o
shows that vi has been set. However, pressing [Esc] to invoke vi command
mode has no effect. The next key pressed simply results in an alarm
(beep), as if though set -o vi had not been executed. Again, this DOES
work for root, but not for non-root users. I've scanned your site for
mention of this, and I've seen none. I checked out the COMPAT file for
bash-2.04, and it doesn't mention this either. "Jp" at Redhat tells me
that he believes that this functionality has been removed for non-root
users, but advised me that I could go ahead and report this as a bug. Is
this a bug, or a "feature?" (If this is an intentional change, could
someone please tell me why on God's earth you would remove one of the best
features of a command-line based shell???!!!) Please help!
This is how I fixed it.
(sopic) /etc% diff -u inputrc.orig inputrc
--- inputrc.orig Fri Nov 17 15:09:53 2000
+++ inputrc Fri Nov 17 15:10:10 2000
@@ -1,26 +1,7 @@
# do not bell on tab-completion
-#set bell-style none
+set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
-# for linux console
-# for xterm
-#for freebsd console
Sorry. With all due respect, this is not a "fix." The shell is supposed to allow command-line editing in its default state, as long as set -o vi has been
invoked. I shouldn't have to tweak anything to get this feature to work, and I shouldn't have to set up a work-around. The editing feature works for root
and for nobody else, and this is -- plainly and simply -- a bug.
Let me add that I'm appreciative of email@example.com for the information about how he "fixed" the problem by revising the /etc/inputrc file. I realize I might
have come across as unappreciative in my previous additional comment.
The point I was trying to make is that root and non-root users are all pointed to the same /etc/inputrc file via the INPUTRC environment variable (I have
confirmed this on my system). root and non-root users are using the same instance of bash. There is no documented difference in expected behavior of
command-line editing between root and non-root users.
And yet, there IS a difference. When firstname.lastname@example.org changed a line and deleted some others from /etc/inputrc, this should have changed the behavior
of the command-line editing for EVERYONE, not just non-root users. It still doesn't explain why -- given the same /etc/inputrc file to init Readline with --
there is a behavioral difference between root and non-root. In previous versions of RH, the default installation has not had this problem. The new version
of bash (2.04) may be the culprit, or perhaps the Readline library it's linking to is the culprit. Perhaps a permission setting is screwed up somewhere?
I'm investigating this in my spare time, but it would be great if someone could pinpoint the root cause (no pun intended) of this problem.
I've also worked around this very annoying bug for a long time. What I've
discovered is that
it works for non root users if you don't add set -o vi to .profile or it's
friends. You log in and
type set -o vi by hand and then it works properly. I certainly with gnu.org
would fix it.
In response to email@example.com's comments: My experience has not been the same as yours. This is the first version of bash I've had this
problem with. Furthermore, in the current version, it doesn't matter if you put set -o vi in .profile or if you type it in after you log in. The problem is the
The fix provided by firstname.lastname@example.org cures the symptom. The problem is, that it shouldn't have made a difference. That is, root and the non-root users
were all looking at /etc/inputrc as installed by the RedHat installer. set -o vi worked with root, and not with anyone else. Then, I put email@example.com's
changes into /etc/inputrc, and now set -o vi works for everybody! That's great, except that it doesn't explain why there was a difference in behavior
between root and non-root users to begin with. There shouldn't have been. Perhaps root is not actually looking at the contents of inputrc (even though
the INPUTRC environment variable was set to /etc/inputrc), or perhaps certain inputrc options are ignored by root? There is no documentation supporting
a difference in behavior.
*** Bug 23014 has been marked as a duplicate of this bug. ***
FWIW, this seems to have been fixed for me in 7.1, Shane
This is finally fixed in the current set of related packages (bash, readline,