Linux Shell


Action Emacs Mode Vi Mode
Switch to this mode (bash) set -o emacs set -o vi
Switch to this mode (zsh) bindkey -e bindkey -v

Common Variables

Variable Definition
$$ Process ID of Shell
$* All arguments $1..
"$*" All arguments $1.. as a single quoted string
$@ All arguments $1..
"$@" All arguments $1.., individually quoted
$! Process ID of last created background process
$? Return value of last statement

Logging I/O in the Shell

Using the script command:

script $(date -I).$$.log


tmux lacks native support, but there’s a great tmux-logging plugin.

Alternatively, there’s a keybinding that can be used with the tmux pipe-pane command:

bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log'

Other replacements can be seen in tmux(1) or tmux notes.

GNU Screen

screen can easily log. From within a screen session, press the command character (default ^A) and then:

:log <name of log>

Cool Shell Utilities

  • bat - A modern take on cat.
  • modern-unix - List of “modern unix” utilities.
  • starship - A modern cross-shell prompt.