====== bash ====== * http://kvz.io/blog/2013/11/21/bash-best-practices/ * http://wiki.bash-hackers.org/commands/builtin/printf ===== Beállítások ===== Alapvető hibakezelés: set -eufo pipefail
... * Use ''set -o errexit'' (a.k.a. ''set -e'') to make your script exit when a command fails. * Then add ''|| true'' to commands that you allow to fail. * Use ''set -o nounset'' (a.k.a. ''set -u'') to exit when your script tries to use undeclared variables. * Use ''set -o xtrace'' (a.k.a ''set -x'') to trace what gets executed. Useful for debugging. * Use ''set -o pipefail'' in scripts to catch ''mysqldump'' fails in e.g. ''mysqldump |gzip''. The exit status of the last command that threw a non-zero exit code is returned. ... kvz.io
===== Billentyű parancsok ===== * https://ss64.com/bash/syntax-keyboard.html Hasonlóan az [[tudasbazis:linux:emacs|Emacs]] billentyű parancsokhoz ===== Argumentumok kompakt kiíratása ===== printf '"%b"\n' "$0" "$@" | nl -v0 -s": " ===== Karakter ismétlése sokszor ===== * http://stackoverflow.com/q/5799303/1108919 * http://stackoverflow.com/q/5349718/1108919 * 120 db szóköz: printf '%120s' * 120 db tetszőleges karakter (pl. "=" jel): printf '%120s' | tr ' ' '=' ===== Alapértelmezett érték ===== * http://stackoverflow.com/a/26899206/1108919 * http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion * Ha nincs deklarálva a ''$parameter'' változó, akkor legyen lecserélve a "default" szóra: echo "${parameter='default'}" * Ha nincs deklarálva, vagy üres string a ''$parameter'' változó, akkor legyen lecserélve a "default" szóra: echo "${parameter:='default'}" ===== Változók, tömbök ===== * http://unix.stackexchange.com/a/122848/21185 * http://www.thegeekstuff.com/2010/06/bash-array-tutorial ^ ^ ''$param != null'' ^ ''$param == null'' ^ ''unset param'' | ^ ''${param:-word}'' | ''$param'' | ''word'' | ''word'' | ^ ''${param:=word}'' | ''$param'' | =''word'' | =''word'' | ^ ''${param:?word}'' | ''$param'' | hiba | hiba | ^ ''${param:+word}'' | ''$param'' | ''null'' | ''null'' | ===== Fájl nyitása úgy, hogy az FD-jét elkérjük ===== exec {out_fd}>/tmp/en_fajlom echo "${out_fd}" #például 10 ===== Pseudo fájlok ===== * http://unix.stackexchange.com/a/64011/21185 * http://tldp.org/LDP/abs/html/process-sub.html Parancs kimenetének használata, mint fájl leíró * cat <( date ) * date >( cat ) ===== Mókás példa ===== * https://gist.github.com/andras-tim/f8aebf9243cecf3719d27d020a718ef8 TODO: Solution: | Component | Explanation | ------------- | --------------- | ------ | | Note | | `echo 2 >a` | Write `2` to file **a**. | Creates **a** file with `2` content | | `<(echo 3)` | Run `echo 3` command in a sub-shell and get the path of the it's stdout fd (e.g. `/dev/fd/63`). | Creates a subshell | | `exec {b}< /dev/fd/63` | ??? | ??? | | `cat -` | `cat` reads from stdin instead of a file and writes everything to stdout || | `echo 1 | cat -` | stdout of `echo 1` piped to `cat` | #1 input of `cat` | | `cat - indents | #4 input of `cat` | | `cat - <<<5` | Write `5` to stdin of `cat` | #5 input of `cat` | | `cat 2>&1` | merge stderr of cat into it's stdout | | `cat >c` | `cat` writes the input data to file **c** | creates **c** file | | `cat >|d` | `cat` writes the input data to file **d** if the **d** is not existed ??? | creates **d** file | | `cat >>e` | `cat` appends the input data to file **e** | creates **e** file | ===== Háttérben futtatás ===== * https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and * Háttérben indítás: # a szülő process megszűnésekor a parancs is leáll command & # a szülő process megszűnésekor a parancs tovább él command &! # == nohup command * Előtérben indított program háttérbe szüneteltetése: Ctrl+Z * Szüneteltetett program kezeléseÉ # folytatás előtérben fg # folytatás háttérben bg * Háttérben indított program utólagos leválasztás a szülőről: disown ==== Escape ==== * https://stackoverflow.com/a/41940626/1108919