ZSH
TLDR:
- install ohmyzsh
- in
.zshrc
setZSH_THEME="agnoster"
- see agnoster-zsh-theme - install powerline-fonts with
sudo apt-get install fonts-powerline
- reboot
The rest is history.
Good read:
zsh startup
.zshenv
→ [.zprofile
if login] → [.zshrc
if interactive] → [.zlogin
if login] → [.zlogout
sometimes]
.zshenv
is always sourced. It contains exported variables that should be
available to other programs, e.g. $PATH
, $EDITOR
, $PAGER
.
.zprofile
is the same as .zlogin
except that it’s sourced before .zshrc
while .zlogin
is sourced after .zshrc. According to the zsh documentation:
.zprofile is meant as an alternative to .zlogin for ksh fans; the two are not intended to be used together, although this could certainly be done if desired.
.zshrc
is for interactive shell configuration. You set options for the
interactive shell there with the setopt and unsetopt commands. You can also:
- load shell modules
- set your history options
- change your prompt
- set up zle and completion, etc.
You also set any variables that are only used in the interactive shell (e.g. $LS_COLORS).
.zlogin
is sourced on the start of a login shell but after .zshrc
if the
shell is also interactive. This file is often used to start X. Some systems
start X on boot, so this file is not always very useful.
.zshenv, .zprofile, .zshrc
See dot-files
zsh/bash tips
cat << EOF > session.txt
Your user name is: $(whoami)
Your current working directory is: $PWD
Your Bash version is: $ZSH_VERSION
EOF
Compare command output with expectations
diff -u expected.txt <(some command)
bash script header
#!/usr/bin/env bash
# Exit on error. Append "|| true" if you expect an error.
set -o errexit
# Exit on error inside any functions or subshells.
set -o errtrace
# Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR
set -o nounset
# Catch the error in case mysqldump fails (but gzip succeeds) in `mysqldump |gzip`
set -o pipefail
# Turn on traces, useful while debugging but commented out by default
set -o xtrace
# add your commands below...
Shell Variables
From Shell-Variables:
Variable | Description |
---|---|
PPID | The process ID of the shell’s parent process. |
PWD | The current working directory as set by the cd builtin. |
RANDOM | Each time this parameter is referenced, it expands to a random integer between 0 and 32767. |
From Special-Parameters:
Parameter | Description |
---|---|
$* |
Positional parameters, starting from one. |
$@ |
Positional parameters, starting from one. |
$# |
Number of positional parameters in decimal. |
$? |
Exit status of the most recently executed foreground pipeline. |
$$ |
Process ID of the shell. In a subshell, it expands to the process ID of the invoking shell, not the subshell. |
$! |
Process ID of the job most recently placed into the background. |
$0 |
Name of the shell or shell script. |
$1 ..$9 |
The first 9 additional parameters the script was called with. |
Parameter Expansion
echo "${var}"
echo "Substitute the value of var."
echo "${var:-word}"
echo "If var is null or unset, word is substituted for var. The value of var does not change."
echo "${var:=word}"
echo "If var is null or unset, var is set to the value of word."
echo "${var:?message}"
echo "If var is null or unset, message is printed to standard error. This checks that variables are set correctly."
echo "${var:+word}"
echo "If var is set, word is substituted for var. The value of var does not change."
May combine with colon built-in to assign a default value to a variable, e.g.:
# TMPDIR is defined on MacOS
: "${TMPDIR:=/tmp}"
One-liners
URL-decode CLI
echo -n "%21%20" | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()));"
Rename the files to lowercase
Try this:
for file in * ; do lower=$(echo $file | tr A-Z a-z) && [[ $lower != $file ]] && echo mv $file $lower ;done
To do the job remove the echo
.