What is the meaning of ! in a command? For example ls command, what is the output after put in from of it (!ls)?
It means to run the last command in your history list that begins with
ls as it was pointed out to me. If you last ran a command of
lsb_release then that would be ran. If you ran just the command
ls it would give you the directory listing. It runs the last or most recent command that starts with whatever you specify.
If you run
history on your system you will see all the commands that you have ran. And if you wanted a specific command from your history it would be
!1990 would run my previous command of
Example history output:
1990 cd 1991 sync 1992 ssh email@example.com 1993 sync 1994 sync 1995 sudo apt autoremove 1996 reboot 1997 sudo apt remove nvidia-driver-430 1998 sudo apt install nvidia-driver-435 1999 sudo apt autoremove 2000 reboot 2001 ./intrepid_check.bsh 2002 ssh intrepid 2003 ls -al 2004 ls 2005 ls -al 2006 history terrance@terrance-ubuntu:~$
And if I wanted to run the last
ssh command on that list I type it in as
terrance@terrance-ubuntu:~$ !ssh ssh intrepid Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-29-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * Congrats to the Kubernetes community on 1.16 beta 1! Now available in MicroK8s for evaluation and testing, with upgrades to RC and GA snap info microk8s * Canonical Livepatch is enabled. - All available patches applied. 0 packages can be updated. 0 updates are security updates. Your Hardware Enablement Stack (HWE) is supported until April 2023. You have mail. Last login: Wed Sep 25 21:38:55 2019 from 10.0.0.100 -------------------------------------------------------------- 09/25/19 21:43:36 terrance@Intrepid:~$
Hope this helps!
man bash. It says, in part:
Event Designators An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. ! Start a history substitution, except when followed by a blank, newline, carriage return, = or ( (when the extglob shell option is enabled using the shopt builtin). !n Refer to command line n. !-n Refer to the current command minus n. !! Refer to the previous command. This is a synonym for `!-1'. !string Refer to the most recent command preceding the current position in the history list starting with string. !?string[?] Refer to the most recent command preceding the current position in the history list containing string. The trailing ? may be omitted if string is followed immediately by a newline. ^string1^string2^ Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to ``!!:s/string1/string2/'' (see Modifiers below). !# The entire command line typed so far.