|
|
- /dev/fd/<nr>
/dev/stdin, /dev/stdout, /dev/stderr
Zugriff auf Filedeskriptoren
~ $ alias | diff /dev/fd/0 my-bash-aliases
2c2
< alias -='popd'
---
> alias -- -='popd'
~ $
|
|
|
|
|
|
|
|
- Syntax: /dev/tcp/<host>/<port>, /dev/udp/<host>/<port>
- Zugriff auf's Netzwerk
- nur zur Ausgabeumleitung
Skript: get_server.sh
#!/bin/bash
exec 5<>/dev/tcp/www.kalug.de/80 # Verbindung öffnen
( # Request schicken
echo "HEAD / HTTP/1.0"
echo "Host: www.kalug.de"
echo
) >&5
grep "Server:" <&5 # Antwort abholen
exec 5>&- # wieder aufräumen
exec 5<&-
|
|
~ $ get_server.sh
Server: Apache/1.3.29 (Unix)
~ $
|
|
Anmerkung: Die Debian Bash hat dieses Feature explizit ausgeschaltet
(siehe /usr/share/doc/bash/README.Debian.gz).
|
|
|
|
|
|
- Syntax: >(cmd), <(cmd)
- Ein-/Ausgabe als Named Pipe verfügbar, Dateinamen übergeben
~ $ echo $(date)
Mon Jul 26 17:23:10 CEST 2004
~ $ echo <(date)
/dev/fd/63
~ $
|
|
|
|
|
|
|
|
- Syntax: >(cmd)
- Ausgabe als Named Pipe verfügbar, Dateinamen übergeben
Skript: output_filter.sh
#!/bin/bash
echo "ungefiltert: "
ls *.txt
echo
exec > >(grep -iv fuck)
echo "gefiltert:"
ls *.txt
|
|
~ $ output_filter.sh
ungefiltert:
allgemeines.txt
fuck.txt
todo.txt
gefiltert:
allgemeines.txt
todo.txt
~ $
|
|
|
|
|
|
|
|
- Syntax: <(cmd)
- Eingabe als Named Pipe verfügbar, Dateinamen übergeben
Skript: decode_msg.sh
#!/bin/bash
exec 5< <(ssh-askpass)
<message gpg -d --passphrase-fd 5
exec 5<&-
|
|
~ $ diff <(ls ordner1) <(ls ordner2)
2c2
< anfrage.txt~
---
> busplan.txt
~ $
|
|
|
|
|
|
|
|
~ $ exec &> >(tee session.log)
~ $ ls
bin/ wichtig.txt todo.txt vortrag.txt
~ $ date
Mon Jul 26 17:23:10 CEST 2004
~ $ exec &> $(tty)
~ $
|
|
|
Beispiel: Alles mitloggen
|
~ $ cat session.log
~ $ ls
bin/ wichtig.txt todo.txt vortrag.txt
~ $ date
Mon Jul 26 17:23:10 CEST 2004
~ $ exec &> $(tty)
~ $
|
|
|
Log anzeigen
|
|
|
|
|
|
|
|
find -exec vs. find | xargs
~ $ find -type d -exec chmod 755 {} \;
~ $
|
|
|
Langsam: für jede gefundene Datei wird chmod einzeln aufgerufen
|
~ $ find -type d -print0 | xargs -0 chmod 755
~ $
|
|
|
Schneller: chmod wird nur einmal mit vielen Argumenten gestartet
|
Nicht alles lässt sich mit find | xargs machen, was mit find -exec geht:
~ $ find -name '*.png' -exec mv {} bilder/ \;
~ $
|
|
|
|
Anmerkung zum letzten Beispiel: Während des Vortrags wurde ich
per Wortmeldung darüber aufgeklärt, dass find | xargs das doch kann.
Ich ziehe meine Behauptung zurück :-)
|
|
|
|