Updated: 06 July 2023
shell
bash array
Updated: 23 June 2023
Bash does not support multi-dimensional arrays.
zsh
Updated: 17 June 2023
Files added by new install
.zshenv
.zprofile
.zshrc
.zlogin
.histfile
shell
Updated: 09 May 2023
ShellCheck
https://www.shellcheck.net/
https://github.com/koalaman/shellcheck
bash docs
https://linux.die.net advanced bash scripting
https://www.gnu.org/software/bash/manual/
Style guide
bash history
Updated: 15 April 2023
History doesn’t get written to .bash_history
until log off.
Show history
history
Clear session history
history -c
Delete item 234 from history
history -d 234
Writes all current session command history to the HISTFILE
history -w
Search history
Ctrl+R
and start typing the previous command. Once a result appears, repeat Ctrl+R
to see other matches. Enter
to run command.
To re-run a command from history
!<item number>
bash process substitution
Updated: 11 January 2023
>(command_list) <(command_list)
Process substitution feeds the output of a process (or processes) into the stdin of another process. It uses /dev/fd/<n>
files to send the results of the process(es) within parentheses to another process. Effectively, process substitution turns a command into a temporary file, which is removed when the command completes.
cat <(echo hello world) # hello world echo <(echo hello world) # /dev/fd/63
The first command converts the output of echo hello world
into a file with contents hello world
. The second command shows us the temp file in use.
The diff
command requires files as arguments. So, comparing the contents of two directories can be achieved with diff
and process substitution
diff <(ls /bin) <(ls /usr/bin)
Docopt
Updated: 10 January 2023
Argbash
Updated: 10 January 2023
Create an argbash template file
argbash-init --pos positional-arg --opt optional-arg minimal.m4
Use the template file to create a script
argbash minimal.m4 -o my-script.sh
Re-generate script after editing Argbash section
argbash my-script.sh -o my-script.sh
bash sort
Updated: 01 January 2023
Sort by second column of tabulated data
$ printf "101\tc\n102\tb\n103\ta\n" 101 c 102 b 103 a $ printf "101\tc\n102\tb\n103\ta\n" | sort -k2 103 a 102 b 101 c
bash expand
Updated: 01 January 2023
shell-expand-line
Check if shell-expand-line is bound to any keys
$ bind -P | grep shell-expand-line
If not add this to .inputrc
"\e\C-e": shell-expand-line
Test it
$ $HOME # Ctr+Alt+e, should print full path.