User Tools

Site Tools


bash_cheatsheet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
bash_cheatsheet [2014/11/30 12:11] – [Work with file paths] ginkobash_cheatsheet [2019/02/13 16:07] (current) – [Output of a shell command] ginko
Line 71: Line 71:
 ~% echo "${FILE##*.}" ~% echo "${FILE##*.}"
 gz</code> gz</code>
 +==== Output of a shell command ====
 +  * ''$(mycmd params)''<code bash>mydate=$(date +%Y-%m-%d)
 +mytimestamp=$(date '+%Y-%m-%d %H:%M:%S')</code>
 ===== Mastering history ===== ===== Mastering history =====
 [[http://www.eriwen.com/bash/effective-shorthand/|Source]] [[http://www.eriwen.com/bash/effective-shorthand/|Source]]
Line 87: Line 90:
  
 ===== Redirection ===== ===== Redirection =====
 +[[http://www.losurs.org/docs/redirection|Deux trois trucs intéressants sur les redirections]]
   * Diriger plusieurs lignes vers un fichier :<code bash>/bin/cat <<EOM >$FILE   * Diriger plusieurs lignes vers un fichier :<code bash>/bin/cat <<EOM >$FILE
 text1 text1
Line 93: Line 97:
 text4 text4
 EOM</code> EOM</code>
 +  * Normal:
 +    * ''binary > file'' (send stdout to file)
 +    * ''binary 2> file'' (send stderr to file)
 +    * ''binary > file 2>&1'' (send stdout and stderr to file)
 +    * ''binary < file'' (take stdin from file) 
 +  * Append:
 +    * ''binary %%>>%% file'' (send stdout to end of file)
 +    * ''binary 2%%>>%% file'' (send stderr to end of file)
 +    * ''binary %%>>%% file 2>&1'' (send stdout and stderr to end of file)
 +    * ''binary %%<<%%x'' (take stdin until "x" occurs) 
 +  * Pipes:
 +    * ''binary1 | binary2'' (pipe stdout of binary1 to stdin of binary2)
 +    * ''binary1 2>&1 | binary2'' (pipe stdout and stderr of binary1 to binary2) 
 +
 +
 +==== The problem with cats ... ====
 +
 +Take a simple redirection example such as this:
 +
 +''cat file1 | tr -d '\015' > file2''
 +
 +You've wasted a process on cat, since you could accomplish the same thing (and have it execute faster!) by doing this:
 +
 +''tr -d '\015' < file1 > file2''
 +
 +==== Sending stderr through a pipe ====
 +
 +Sending only stderr down a pipe, while having stdout still go to the screen, is an interesting trick. It can be done by passing the stdout and stderr file descriptors to temporary file descriptors, and basically playing a game of 3 card monte with the values:
 +
 +''(binary 3>&1 1>&2 2>&3 3>&-) | mail me@somewhere.org &''
 +
 +===== Fonctions =====
 +''func_name () { cmd1; cmd2 }''
 +
 +On retrouve cette syntax au coeur de la fameuse fork bomb bash '':(){ :|:& };:'' où '':'' est le nom de la fonction. L'utilisation du pipe et des '':'' est a priori seulement là pour obfusquer un peu plus la syntaxe ('':'') et la raccourcir (''|''). ''f(){f&;f&;};f'' fait quaisment la même chose.
 +
bash_cheatsheet.1417345893.txt.gz · Last modified: 2014/11/30 12:11 by ginko