Unix & Linux Asked on October 31, 2021
I have some commands in my Bash history that I want to remove.
I can find them with history | grep "command with password"
then remove them with history -d <line-number>
However, when I try to delete them in bulk by piping them to xargs
like this I get an error:
history | grep "command with password" | awk '{print $1}' | sort -r | xargs history -d
xargs: history: No such file or directory
I thought that xargs
would go through the list of line numbers and send it one by one to the history -d
command.
What is causing this error?
NB: I know there are other ways to delete the history, the question is purely to improve my understanding of how xargs
works and what I am doing wrong that is causing the error.
The error is raised because xargs cannot find a history
command. It is a shell builtin, as you can confirm with type history
, thus not visible to xargs. Try
echo 1 | xargs history -d; echo $?
The return value is 127. In man xargs
, EXIT STATUS section:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.
Expanding on ilkkachu's comment, in principle you could invoke Bash and call history
from the spawned shell.
echo 1 | xargs -I {} bash -c 'echo $HISTFILE; history' bash {}
The above command does not raise an error, after all the builtin history
is available to the Bash shell. However, from that same command one also finds that HISTFILE
is unset and history
outputs nothing: The history is not enabled on a non-interactive shell. Again, you could activate it with the set
builtin, export HISTFILE
and HISTFILESIZE
... But we don't want a headache. Editing .bash_history
directly is the straightforward way to go.
Answered by Quasímodo on October 31, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP