prompts
reference:
- * imarslo: color
- * Bash/Prompt customization
- * Bash/Prompt customization
- Colors using tput
- What color codes can I use in my PS1 prompt?
- joseluisq/terminal-git-branch-name.md
- How to show git branch in terminal and change terminal colours
- 8 Useful and Interesting Bash Prompts
- * 2.5. Bash Prompt Escape Sequences
- * My Ultimate PowerShell prompt with Oh My Posh and the Windows Terminal
settings
[!NOTE|label:inputrc]
# https://marslo.github.io/ibook/screenshot/colors/ansi/color-formatting.png
fgc=$(RGBcolor 5 6 8) # 240; fgc=$(RGBcolor 5 6 5) # 237
COL_SD_GREEN='\[\033[32;2m\]' # COL_SD_GREEN='\[\033[2;32m\]'
COL_IF_SL_RED='\[\033[0\;31m\]'
COL_DEFAULT="\[\033[38;5;${fgc}m\]" # "\[$(tput setaf ${fgc})\]"; $"\e[38;5;${fgc}m";
COL_IF_DEFAULT="\[\033[38\;5\;${fgc}m\]" # COL_IF_DEFAULT="\[\033[1\;38\;5\;${fgc}m\]" | COL_IF_DEFAULT="${COL_IF_SD_GREEN}"
COL_RESET='\[\033[1m\]' # COL_RESET="\[$(tput sgr0)\]" | COL_RESET='\[\033[1m\]'
COL_NONE='\[\033[0m\]' # COL_NONE='\[\033[38;5;3m\]'
PS1="\\n${COL_RESET}${COL_DEFAULT}╭╶ (\\u@\\h${COL_RESET} "
PS1+="${COL_SL_RED}\\w${COL_RESET}${COL_DEFAULT}) "
PS1+="\$(__git_ps1 \"- (${COL_SD_GREEN}%s${COL_NONE}${COL_DEFAULT}) \")${COL_RESET}"
PS1+="${COL_DEFAULT}\`if [ \$? = 0 ]; then echo ${COL_IF_DEFAULT}\⏵; else echo ${COL_IF_SL_RED}\⏵; fi\`${COL_RESET}"
PS1+="\\n${COL_DEFAULT} \$ ${COL_RESET}"
PS1+="${COL_NONE}"
PS2="${COL_DEFAULT} -> ${COL_RESET}${COL_NONE}"
PS4=' ${BASH_SOURCE}:$FUNCNAME:$LINENO: '
PS1="\\n${COL_RESET}${COL_DEFAULT}╭╶ (\\u@\\h${COL_RESET} "
PS1+="${COL_SL_RED}\\w${COL_RESET}${COL_DEFAULT}) "
PS1+="\`__git_ps1 '- (%s) '\`"
PS1+="${COL_RESET}${COL_DEFAULT}->${COL_RESET}"
PS1+="\\n${COL_DEFAULT}╰╶ ${COL_RESET}"
PS1+="\`if [ \$? = 0 ]; then echo ${COL_IF_DEFAULT}\\$; else echo ${COL_IF_SL_RED}\\$; fi\` ${COL_RESET}"
PS1+="${COL_NONE}"
# PS2="${COL_DEFAULT} |-> ${COL_RESET}${COL_NONE}"
PS2="${COL_DEFAULT} -> ${COL_RESET}${COL_NONE}"
PS4=' ${BASH_SOURCE}:$FUNCNAME:$LINENO: '
export PS1 PS2 PS4
UMARK='\[\033(0\]l\[\033(B\]'
DMARK='\[\033(0\]m\[\033(B\]'
LMARK='\[\033(0\]q\[\033(B\]'
COL_SL_GREEN='\[\033[32;0m\]'
COL_SD_GREEN='\[\033[32;2m\]' # COL_SD_GREEN='\[\033[2;32m\]'
COL_SD_YELLOW='\[\033[2;33m\]'
COL_SL_YELLOW='\[\033[0;33m\]'
COL_B_YELLOW='\[\033[2;33m\]'
COL_IF_SD_YELLOW='\[\033[2\;33m\]'
COL_D_BLACK='\[\033[30;1m\]'
COL_L_BLACK='\[\033[30;0m\]'
COL_SD_BLACK='\[\033[1;30m\]'
COL_SL_BLACK='\[\033[0;30m\]'
COL_SD_RED='\[\033[1;31m\]'
COL_SL_RED='\[\033[0;31m\]'
COL_SD_BLUE='\[\033[1;34m\]'
COL_SL_BLUE='\[\033[0;34m\]'
COL_L_RED='\[\033[31;0m\]'
COL_D_RED='\[\033[31;1m\]'
COL_IF_D_BLACK='\[\033[30\;1m\]'
COL_IF_L_BLACK='\[\033[30\;0m\]'
COL_IF_SD_BLACK='\[\033[1\;30m\]'
COL_IF_SL_BLACK='\[\033[0\;30m\]'
COL_IF_SL_YELLOW='\[\033[0\;33m\]'
COL_IF_D_RED='\[\033[31\;1m\]'
COL_IF_SD_RED='\[\033[1\;31m\]'
COL_IF_SL_RED='\[\033[0\;31m\]'
COL_IF_SL_GREEN='\[\033[0\;32m\]'
COL_IF_SD_GREEN='\[\033[2\;32m\]'
COL_IF_SL_BLUE='\[\033[0\;34m\]'
COL_IF_SD_BLUE='\[\033[1\;34m\]'
if [ -z "$DISPLAY" ]; then
export PS1="\n${COL_D_BLACK}┌─ (\u@\h ${COL_RESET} ${COL_D_RED}\w${COL_RESET}${COL_D_BLACK}) ->${COL_RESET}\n${COL_D_BLACK}└─ ${COL_RESET}\`if [ \$? = 0 ]; then echo ${COL_SD_BLACK}\\$ ${COL_RESET}; else echo ${COL_SD_RED}\\$ ${COL_RESET}; fi\`${COL_NONE}"
export PS2="${COL_D_BLACK} -> ${COL_RESET}${COL_NONE}"
else
export PS1="\n${COL_D_BLACK}${UMARK}${LMARK} (\u@\h ${COL_RESET} ${COL_D_RED}\w${COL_RESET}${COL_D_BLACK}) ->${COL_RESET}\n${COL_D_BLACK}${DMARK}${LMARK} ${COL_RESET}\`if [ \$? = 0 ]; then echo ${COL_SD_BLACK}\\$ ${COL_RESET}; else echo ${COL_SD_RED}\\$ ${COL_RESET}; fi\`${COL_NONE}"
export PS2="${COL_D_BLACK} ->${LMARK} ${COL_RESET}${COL_NONE}"
fi
# for mac os -> Solarized Dark
export PS1="\n${COL_DEFAULT}┌─ (\u@\h${COL_RESET} ${COL_SD_RED}\w${COL_RESET}${COL_DEFAULT}) ->${COL_RESET}\n${COL_DEFAULT}└─ ${COL_RESET}\`if [ \$? = 0 ]; then echo ${COL_IF_DEFAULT}\\$ ${COL_RESET}; else echo ${COL_IF_SL_RED}\\$ ${COL_RESET}; fi\`${COL_NONE}"
PS4
[!NOTE|label:references:]
- show timestamp
$ bash -xc $'PS4=\'+ $(date "+%T %x ($LINENO) : ")\'; echo ABC; echo XYZ'
+ PS4='+ $(date "+%T %x ($LINENO) : ")'
+ 15:45:51 08/29/2024 (1) : echo ABC
ABC
+ 15:45:51 08/29/2024 (1) : echo XYZ
XYZ
# or
$ PS4='+ \D{%s} ($LINENO) ' bash -xc 'echo ABC; echo XYZ'
+ 1724971586 (1) echo ABC
ABC
+ 1724971586 (1) echo XYZ
XYZ
# or
$ cmd=$(cat <<'EOF'
PS4='+ $(date "+%T %x ($LINENO) : ")'
echo ABC
echo XYZ
EOF
)
bash -xc "$cmd"
- show process id
$ env -i SHELLOPTS=xtrace PS4='$(id)' ./test
colors
Bash tips: Colors and formatting (ANSI/VT100 Control sequences)
# https://misc.flogisoft.com/bash/tip_colors_and_formatting # ----+---+---+----+---+---- --------+-------- ----+------+------ # | ⌌・| ⠋ | ⌜ | ╭╶ | ┌ | ┌─ | | 0\;xxm | Normal | | \e | \033 | \x1B | # | ⌎・| ⠦ | ⌞ | ╰╶ | └ | └─ | | 1\;xxm | Bright | ----+------+------ # ----+---+---+----+---+---- --------+-------- # # ---+--------------++---------------------++----------------------+ +----------------- # | # | color name || foregrand || background | | attribute | # ---+--------------++---------------------++----------------------+ +---+------------- # | 9 | Default || \e[0;39m || e[0;49m | | 0 | Normal | # | 0 | Black || \e[0;30m | || \e[0;40m | | | 1 | Bold | # | 1 | Red || \e[0;31m | || \e[0;41m | | | 2 | Faint | # | 2 | Green || \e[0;32m | || \e[0;42m | | | 3 | Italic | # | 3 | Yellow || \e[0;33m | || \e[0;43m | | | 4 | Underline | # | 4 | Blue || \e[0;34m | || \e[0;44m | | | 5 | Slow Blink | # | 5 | Purple || \e[0;35m | || \e[0;45m | | | 6 | Rapid Blink | # | 6 | Cyan || \e[0;36m | || \e[0;46m | | | 7 | reverse | # | 7 | Light Gray || \e[0;37m | || \e[0;47m | | ---+------------- # | 0 | Dark Gray || \e[1;30m | \e[0;90m || \e[1;40m | \e[0;100m | --------------------- # | 1 | Light Red || \e[1;31m | \e[0;91m || \e[1;41m | \e[0;101m | | others | # | 2 | Light Green || \e[1;32m | \e[0;92m || \e[1;42m | \e[0;102m | -------------+------- # | 3 | Light Yellow || \e[1;33m | \e[0;93m || \e[1;43m | \e[0;103m | | color none | \e[0m | # | 4 | Light Blue || \e[1;34m | \e[0;94m || \e[1;44m | \e[0;104m | | color reset | \e[1m | # | 5 | Light Purple || \e[1;35m | \e[0;95m || \e[1;45m | \e[0;105m | -------------+------- # | 6 | Light Cyan || \e[1;36m | \e[0;96m || \e[1;46m | \e[0;106m | ----------------+--------------------------------- # | 7 | White || \e[0;97m || \e[0;107m | | \[\e[xx;0m]\] | system color | # ---+--------------++---------------------++---------------------- | \[\e[xx\;0m]\] | system color in `` | # | | || \e[38;5;{0..255}m# || \e[48;5;{0..255}m# | | \[\e[0;xxm]\] | profile color (solarized) | # ---+--------------++---------------------++---------------------- | \[\e[0\;xxm]\] | profile color (solarized) in `` | # ----------------+--------------------------------- # ------------+------------------------------------------------------- ----------------+------------------------------- # | 256 colors standard format | | comments | # ------------+------------------------------------------------------- ----------------+------------------------------- # | attributes | 0 1 2 3 4 5 6 7 | | COL_NONE | no color | # | foregrand | {0..255} | | COL_RESET | reset color | # | background | {30..37} {90..97} 39 | | COL_DEFAULT | default color | # ------------+------------------------------------------------------- | COL_IF_DEFAULT | default color in if-statement | # | usage : \e[${attributes};{background};5;${foreground}m <str> \e[0m | ----------------+------------------------------- # ------------+------------------------------------------------------- # # Solarized color table from http://ethanschoonover.com/solarized. # # | SOLARIZED | HEX | ANSI | TERMCOL | cmd.exe | PowerShell | ColorTable | DWORD | # |-----------|---------|-----------|-----------|-------------|-------------|------------|----------| # | base03 | #002b36 | ESC[0;30m | brblack | Black | Black | 00 | 00362b00 | # | base02 | #073642 | ESC[1;30m | black | Gray | DarkGray | 08 | 00423607 | # | base01 | #586e75 | ESC[0;32m | brgreen | Green | DarkGreen | 02 | 00756e58 | # | base00 | #657b83 | ESC[0;33m | bryellow | Yellow | DarkYellow | 06 | 00837b65 | # | base0 | #839496 | ESC[0;34m | brblue | Blue | DarkBlue | 01 | 00969483 | # | base1 | #93a1a1 | ESC[0;36m | brcyan | Aqua | DarkCyan | 03 | 00a1a193 | # | base2 | #eee8d5 | ESC[0;37m | white | White | Gray | 07 | 00d5e8ee | # | base3 | #fdf6e3 | ESC[1;37m | brwhite | BrightWhite | White | 15 | 00e3f6fd | # | yellow | #b58900 | ESC[1;33m | yellow | LightYellow | Yellow | 14 | 000089b5 | # | orange | #cb4b16 | ESC[0;31m | brred | Red | DarkRed | 04 | 00164bcb | # | red | #dc322f | ESC[1;31m | red | LightRed | Red | 12 | 002f32dc | # | magenta | #d33682 | ESC[1;35m | magenta | LightPurple | Magenta | 13 | 008236d3 | # | violet | #6c71c4 | ESC[0;35m | brmagenta | Purple | DarkMagenta | 05 | 00c4716c | # | blue | #268bd2 | ESC[1;34m | blue | LightBlue | Blue | 09 | 00d28b26 | # | cyan | #2aa198 | ESC[1;36m | cyan | LightAqua | Cyan | 11 | 0098a12a | # | green | #859900 | ESC[1;32m | green | LightGreen | Green | 10 | 00009985 |
PS1="\[$(tput setaf 0) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 1) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 2) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 3) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 4) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 5) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 6) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 7) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 8) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 9) \]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 10)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 11)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 12)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 13)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 14)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 15)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 16)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 17)\]my prompt\[$(tput sgr0)\]> " PS1="\[$(tput setaf 18)\]my prompt\[$(tput sgr0)\]> "
or ps1 with conditions
$ DEFAULT="\[$(tput setaf 3)\]" # or '\[\033[1;38;5;3m\]' or '\[\e[1;33m\]' $ ifDEFAULT='\[\e[1\;33m\]' # or '\[\033[1\;38\;5\;3m\]' $ ifRED='\[\e[1\;31m\]' # or '\[\033[1\;38\;5\;1m\]' $ PS1="${DEFAULT}my prompt${RESET} \$( if [ \$? != 0 ]; then echo -e ${ifRED}\\$; else echo -e ${ifDEFAULT}\\$; fi) ${RESET}"
functions
function showKeyMap() { RET=$?; bind -v | awk '/keymap/ {print $NF}'; return "${RET}"; }
function rightPrompt() {
if [ "$(bind -v | awk '/keymap/ {print $NF}')" == 'emacs' ]; then
kmap=⌁
else
kmap=⚙︎
fi
printf "%*s" $COLUMNS "${kmap}"
}
PS1+="- [\$(showKeyMap)] "
PS1+="- [\$(tput sc; rightPrompt; tput rc)]"
right prompt
rightprompt() { printf "%*s" $COLUMNS "right prompt"; } PS1='\[$(tput sc; rightprompt; tput rc)\]left prompt > '
character
metacharacter
Character | Where | Meaning |
---|---|---|
<RETURN> |
csh, sh | Execute command |
# |
csh, sh, ASCII files | Start a comment |
<SPACE> |
csh, sh | Argument separator |
` |
csh, sh | Command substitution |
" |
csh, sh | Weak Quotes |
' |
csh, sh | Strong Quotes |
\ |
csh, sh | Single Character Quote |
variable |
sh, csh | Variable |
variable |
csh, sh | Same as variable |
\ |
csh, sh | Pipe character |
^ |
sh | Pipe Character |
& |
csh, sh | Run program in background |
? |
csh, sh | Match one character |
* |
csh, sh | Match any number of characters |
; |
csh, sh | Command separator |
;; |
sh | End of Case statement |
~ |
csh | Home Directory |
~user |
csh | User's Home Directory |
! |
csh | History of Commands |
- |
Programs | Start of optional argument |
$# |
csh, sh | Number of arguments to script |
$* |
csh, sh | Arguments to script |
$@ |
sh | Original arguments to script |
$- |
sh | Flags passed to shell |
$? |
sh | Status of previous command |
$$ |
sh | Process identification number |
$! |
sh | PID of last background job |
&& |
sh | Short-circuit AND |
|| |
sh | Short-circuit OR |
. |
csh, sh | Typ. filename extension |
. |
sh | Source a file and execute as command |
: |
sh | Nothing command |
: |
sh | Separates Values in environment variables |
: |
csh | Variable modifier |
Character |
Where | Meaning |
[ ] |
csh, sh | Match range of characters |
[ ] |
sh | Test |
%job |
csh | Identifies job Number |
(cmd;cmd) |
csh. sh | Runs cmd;cmd as a sub-shell |
{ } |
csh | In-line expansions |
{cmd;cmd } |
sh | Like (cmd;cmd ) without a subshell |
>ofile |
csh, sh | Standard output |
>>ofile |
csh, sh | Append to standard output |
<ifile |
csh, sh | Standard Input |
<<word |
csh, sh | Read until word, substitute variables |
<<\word |
csh, sh | Read until word, no substitution |
<<-word |
sh | Read until word, ignoring TABS |
>>!file |
csh | Append to file, ignore error if not there |
>!file |
csh | Output to new file, ignore error if not there |
>&file |
csh | Send standard & error output to file |
<&digit |
sh | Switch Standard Input to file |
<&- |
sh | Close Standard Input |
>&digit |
sh | Switch Standard Output to file |
>&- |
sh | Close Standard Output |
digit1<&digit2 |
sh | Connect digit2 to digit1 |
digit<&- |
sh | Close file digit |
digit2>&digit1 |
sh | Connect digit2 to digit1 |
digit>&- |
sh | Close file digit |
process substitution
[!TIP] Process substitution is a form of redirection where the input or output of a process (some sequence of commands) appear as a temporary file. reference:
- chapter 23. process substitution Command list enclosed within parentheses
Process substitution uses>(command_list) <(command_list)
/dev/fd/<n>
files to send the results of the process(es) within parentheses to another process. [1]
$ while read branch; do
git fetch --all --force;
done < <(git rev-parse --abbrev-ref HEAD)
$ echo >(true)
/dev/fd/63
$ echo <(true)
/dev/fd/63
$ echo >(true) <(true)
/dev/fd/63 /dev/fd/62
$ echo <(date)
/dev/fd/63
$ cat <(date)
Tue Dec 15 22:32:08 CST 2020
named pipe similar
$ wc <(cat /usr/share/dict/words)
235886 235886 2493109 /dev/fd/63
$ cat /usr/share/dict/words | wc
235886 235886 249310
$ wc <(grep script /usr/share/dict/words)
176 176 5414 /dev/fd/63
$ grep script /usr/share/dict/words | wc
176 176 5414
# https://superuser.com/a/1059790/112396
$ cat file | while read line; do ((count++)); done
$ while read line; do ((count++)); done < <(cat file)
get diff in two folders
$ diff <(ls ibook) <(ls mbook)
1c1,2
< book.json
---
> _book
> book.json
3a5
> node_modules
$ diff <(sleep 4; date) <(sleep 5; date)
1c1
< Tue Dec 15 22:48:31 CST 2020
---
> Tue Dec 15 22:48:32 CST 2020
example: run script without download
$ bash < <(wget -qO - https://raw.githubusercontent.com/ubports/unity8-desktop-install-tools/master/install.sh)
via curl
$ python < <(curl -s https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py)
- or
$ curl -so - https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py | python
- or
-
$ python < <(wget -O - -q -t 1 https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py)
- or
$ wget -qO - https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py | python
- or
-
$ python < <(curl -s https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py) MEMORY ------ Total : 16.0G Available : 5.8G Percent : 63.8 Used : 8.8G Free : 204.5M Active : 5.4G Inactive : 5.6G Wired : 3.4G SWAP ---- Total : 1.0G Used : 269.2M Free : 754.8M Percent : 26.3 Sin : 38.3G Sout : 63.9M
or
$ python < <(curl -s https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/disk_usage.py) Device Total Used Free Use % Type Mount /dev/disk1s5 233.5G 10.6G 70.6G 13% apfs / /dev/disk1s1 233.5G 149.6G 70.6G 67% apfs /System/Volumes/Data /dev/disk1s4 233.5G 2.0G 70.6G 2% apfs /private/var/vm /Library/Input Methods/SogouInput.app 233.5G 149.1G 71.1G 67% nullfs /private/var/folders/s3/mg_f3cv54nn7y758j_t46zt40000gn/T/AppTranslocation/E29031DE-FE63-4ABC-BA3D-E99C743E57D2
example: merge lines of file
$ cat a
t1
t2
t3
t4
$ cat b
11
22
33
44
$ paste <(cat a) <(cat b)
t1 11
t2 22
t3 33
t4 44
additional usage
$ cat a | paste -d'\t' - - - - a b c d e f
or
$ cat a | paste -d, - - a,b c,d e,f
/dev/fd/63
is not a regular file$ more <( ls -l ) /dev/fd/63 is not a regular file (use -f to see it) $ more -f <( ls -l ) total 12 -rw-r--r-- 1 marslo staff 3457 Nov 2 15:53 README.md -rw-r--r-- 1 marslo staff 4314 Nov 2 15:53 SUMMARY.md drwxr-xr-x 6 marslo staff 192 Oct 12 22:10 artifactory drwxr-xr-x 8 marslo staff 256 Sep 29 17:40 cheatsheet drwxr-xr-x 12 marslo staff 384 Oct 15 15:27 devops drwxr-xr-x 7 marslo staff 224 Sep 28 22:17 jenkins drwxr-xr-x 11 marslo staff 352 Sep 28 22:17 kubernetes drwxr-xr-x 8 marslo staff 256 Oct 9 19:15 linux drwxr-xr-x 8 marslo staff 256 Nov 2 15:51 osx drwxr-xr-x 6 marslo staff 192 Sep 28 22:17 programming drwxr-xr-x 45 marslo staff 1440 Nov 2 13:56 screenshot drwxr-xr-x 11 marslo staff 352 Oct 14 21:22 tools
nstalling tools via running random scripts from unknown sites
$ ( wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
fetch -o - http://pi.dk/3 ) > install.sh
strace
[!NOTE|label:reference]
basic commands
du
- top biggest directories under [path]
$ du -a [path] | sort -n -r | head -n 5
- display the largest files according to human-readable format
$ du -hs * | sort -rh | head -5
- display the largest folders/files including the sub-directories
$ du -Sh | sort -rh | head -5
biggest file sizes
$ find -type f -exec du -Sh {} + | sort -rh | head -n 5 # or $ find [PATH] -type f -printf "%s %p\n" | sort -rn | head -n 5
-
$ t=$(df|awk 'NR!=1{sum+=$2}END{print sum}'); sudo du / --max-depth=1 | sed '$d' | sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'
sort
sort result via human-readable format
$ sudo du -ahx --max-depth=1 <path> | sort -k1 -rh
-
$ du -sk * | sort -g | awk '{ numBytes = $1 * 1024; numUnits = split("B K M G T P", unit); num = numBytes; iUnit = 0; while(num >= 1024 && iUnit + 1 < numUnits) { num = num / 1024; iUnit++; } $1 = sprintf( ((num == 0) ? "%6d%s " : "%6.1f%s "), num, unit[iUnit + 1]); print $0; }' # or in one-line $ du -sk * | sort -g | awk '{ numBytes = $1 * 1024; numUnits = split("B K M G T P", unit); num = numBytes; iUnit = 0; while(num >= 1024 && iUnit + 1 < numUnits) { num = num / 1024; iUnit++; } $1 = sprintf( ((num == 0) ? "%6d%s " : "%6.1f%s "), num, unit[iUnit + 1]); print $0; }'
-
#! /usr/bin/env bash ducks () { du -cks -x | sort -n | while read size fname; do for unit in k M G T P E Z Y; do if [ $size -lt 1024 ]; then echo -e "${size}${unit}\t${fname}" break fi size=$((size/1024)) done done } ducks > .ducks && tail .ducks
-
$ du -k ./* | sort -nr | awk '{ split("KB,MB,GB",size,","); } { x = 1;while ($1 >= 1024) {$1 = $1 / 1024;x = x + 1} $1 = sprintf("%-4.2f%s", $1, size[x]); print $0; }'
others
you have new mail
-
$ mail ? delete * No applicable messages. ? q
- or
$ mail -N ? d * ? quit
- or
crontab
[!NOTE|label:references:]
format
* * * * * /home/user/bin/somecommand.sh | | | | | | | | | | | Command or Script to execute | | | | | | | | | Day of week(0-6 | Sun-Sat) | | | | | | | Month(1-12) | | | | | Day of Month(1-31) | | | Hour(0-23) | Min(0-59)
tips
- every odd hours
0 1-23/2 * * *
- every even hours
0 */2 * * *
- every odd hours
sample
delete .DS_
15 */2 * * 1-5 /usr/local/bin/fd --type f --hidden --follow --unrestricted --color=never --exclude .Trash --glob '*\.DS_*' $HOME | xargs -r rm # or 30 */2 * * 1-5 /usr/local/bin/fd -Iu --glob '*\.DS_*' $HOME | xargs -r rm # or 30 */2 * * 1-5 /usr/local/bin/rg --hidden --smart-case --color=never --files "$HOME" -g '*\.DS_*' | xargs -r rm
flush disk cache
0 * * * * /usr/sbin/purge
flush DNS
0 1-23/6 * * * /usr/bin/killall -HUP mDNSResponder
localtion
macos
$ sudo ls -Altrh /usr/lib/cron/tabs/<USERNAME>
freebsd/openbsd/netbsd
$ sudo ls -Altrh /var/cron/tabs/<USERNAME>
centos/rhel/fedora/scientific/rocky/alma linux
$ sudo ls -Altrh /var/spool/cron/<USERNAME>
debian/ubuntu/mint linux
$ sudo ls -Altrh /var/spool/cron/crontabs/<USERNAME>
p-ux unix
$ sudo ls -Altrh /var/spool/cron/crontabs/<USERNAME>
ibm aix unix
$ sudo ls -Altrh /var/spool/cron/<USERNAME>
tricky
unicode
references:
- * iMarslo: Unicode | * iMarslo: unicode in vim/nvim
- How do you echo a 4-digit Unicode character in Bash?
- centos locale utf-8
- How can I make iconv replace the input file with the converted output?
Your description is vague. Either your terminal does not support Unicode, or you're editing a file that's in latin1 (= iso-8859-1). On a bash or zsh shell, with
LC_CTYPE=en_US.UTF-8
, runecho $'\xc3a9'
. If you seeé
, your terminal supports UTF-8. If you seeé
, your terminal is showing latin1.
$ echo $'\xc3a9' a9
$ echo $'\xe2\x98\xa0'
☠
$ echo $'(U+2620) \U02620' | /usr/bin/xxd
00000000: 2855 2b32 3632 3029 20e2 98a0 0a (U+2620) ....
# test
$ for (( i=0x2500; i<0x2600; i++ )); do
UnicodePointToUtf8 $i
[ "$(( i+1 & 0x1f ))" != 0 ] || echo ""
done
─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟
┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿
╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟
╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟
■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿
◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟
◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿
## test harness
$ for (( i=0x2500; i<0x2600; i++ )); do unichr $i; done
─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿
# https://stackoverflow.com/a/55639328/2940319
$ echo -e "\U1F304"
�
$ echo -e "�" | /usr/bin/hexdump -C
00000000 f0 9f 8c 84 0a |.....|
00000005
-
UnicodePointToUtf8() { local x="$1" # ok if '0x2620' x=${x/\\u/0x} # '\u2620' -> '0x2620' x=${x/U+/0x}; x=${x/u+/0x} # 'U-2620' -> '0x2620' x=$((x)) # from hex to decimal local y=$x n=0 [ $x -ge 0 ] || return 1 while [ $y -gt 0 ]; do y=$((y>>1)); n=$((n+1)); done if [ $n -le 7 ]; then # 7 y=$x elif [ $n -le 11 ]; then # 5+6 y=" $(( ((x>> 6)&0x1F)+0xC0 )) \ $(( (x&0x3F)+0x80 ))" elif [ $n -le 16 ]; then # 4+6+6 y=" $(( ((x>>12)&0x0F)+0xE0 )) \ $(( ((x>> 6)&0x3F)+0x80 )) \ $(( (x&0x3F)+0x80 ))" else # 3+6+6+6 y=" $(( ((x>>18)&0x07)+0xF0 )) \ $(( ((x>>12)&0x3F)+0x80 )) \ $(( ((x>> 6)&0x3F)+0x80 )) \ $(( (x&0x3F)+0x80 ))" fi printf -v y '\\x%x' $y echo -n -e $y }
-
fast_chr() { local __octal local __char printf -v __octal '%03o' $1 printf -v __char \\$__octal REPLY=$__char } function unichr { local c=$1 # Ordinal of char local l=0 # Byte ctr local o=63 # Ceiling local p=128 # Accum. bits local s='' # Output string (( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; } while (( c > o )); do fast_chr $(( t = 0x80 | c & 0x3f )) s="$REPLY$s" (( c >>= 6, l++, p += o+1, o>>=1 )) done fast_chr $(( t = p | c )) echo -n "$REPLY$s" }
useful functions
-
function extract () { case $1 in *.tar.bz2 ) tar xjf "$1" ;; *.tar.gz ) tar xzf "$1" ;; *.tar.xz ) tar Jxvf "$1" ;; *.tar.Z ) tar xzf "$1" ;; *.tar ) tar xf "$1" ;; *.taz ) tar xzf "$1" ;; *.tb2 ) tar xjf "$1" ;; *.tbz ) tar xjf "$1" ;; *.tbz2 ) tar xjf "$1" ;; *.tgz ) tar xzf "$1" ;; *.txz ) tar Jxvf "$1" ;; *.zip ) unzip "$1" ;; *.gz ) gunzip "$1" ;; * ) echo "'$1' cannot be extracted" ;; esac }
-
$ up() { local x=''; for i in $(seq ${1:-1}); do x="$x../"; done; cd $x; } # usage $ up $ up 3
-
# 2 minutes in the future $ echocron () { date '-d +2 minutes' +'%M %k %d %m *'; }
search manual page
whatis -r <string>
apropos -r <string>
show services
$ systemctl list-unit-files -t service