Wir hatten diese für viele andere Sprachen. Der für C/C++ war sehr beliebt, so war das Äquivalent für Python. Ich dachte, eine für BASH wäre auch interessant.Nützliche BASH Code Schnipsel
Antwort
Um alle Dateien in ~, die von der Gruppe etwas vboxusers werden, habe ich stattdessen von der Benutzergruppe kent Eigentum im Besitz zu ändern. Aber wie es hatte eine Schwäche bei der Verwendung xargs ich es auf die vorgeschlagene Lösung im Kommentar zu dieser Antwort bin zu ändern:
$ find ~ -group vboxusers -exec chown kent:kent {} \;
Zu lang insgesamt umfassen, aber die Lösungen How do I manipulate $PATH elements in shell scripts? sind sehr nützlich für mich. ..
G'day,
Mein Favorit, und es ist auf andere Schalen anwendbar, die Aliase unterstützen, ist die einfache Möglichkeit, einen Alias vorübergehend zu deaktivieren, indem sie einen Backslash auf einen Befehl vorangestellt wird.
So:
alias rm='rm -i'
würden Sie immer geben interaktiven Modus, wenn rm Eingabe Eingabe
\rm
auf der Kommandozeile umgeht den Alias.
HTH
prost,
ziemlich wichtig. Sie können es immer überschreiben, indem Sie rm -f –
@Chris verwenden, yep. Ich wollte mehr zeigen, wie Alias-Befehle temporär deaktiviert werden. (-: –
Das ist nicht so nützlich, aber wirklich interessant:
history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -n | tail | sort -nr
Es druckt die 10 am häufigsten verwendeten Befehle.
EDIT: Diese Frage ist wirklich ähnlich zu this.
Wir entwickeln Websites und speichern Code für sie in SVN. Bei der Umstellung auf Produktion möchten wir nicht, dass die .svn-Verzeichnisse angezeigt werden. Der folgende Code rekursiert Verzeichnisse und entfernt unerwünschte (könnte für alle unerwünschten Verzeichnisse verwendet werden). Nicht streng, aber trotzdem nützlich.
find . -type d -name .svn | xargs rm -rf
Ausführung von der obersten Pfad im Produkt ... natürlich vorsichtig sein, wie an der falschen Stelle ausgeführt könnte sehr schlimme Dinge passieren.
Sie könnten auch durch eine Änderung vom Typ d -Typ f
In einem BASH-Skript eine normale Datei tun, um ein Argument zu Variablen zuweisen, sondern eine Standard bieten, wenn es vorhanden ist:
MYVAR=${1:-default}
$ MYVAR wird das erste Argument enthalten, wenn man sonst "default" erhalten hat.
Ganz zu schweigen von der Cousine dieses Snippets: MYVAR = $ {OTHER_VAR: = default}, die den Wert von OTHER_VAR auf den Standardwert setzt, wenn es nicht gesetzt ist. Oben verwendet nur die Standardeinstellung verwendet nur den Standardwert in dieser Instanz und lässt $ 1 unset. –
Zum Entfernen von .svn-Verzeichnissen können Sie auch die Kombination 'find ...- prune ...- exec ... verwenden.'(Ohne xargs):
# tested on Mac OS X
find -x -E . \(-type d -regex '.*/\.svn/*.*' -prune \) -ls # test
find -x -E . \(-type d -regex '.*/\.svn/*.*' -prune \) -exec /bin/rm -PRfv '{}' \;
Funktioniert nicht in Linux. – Neil
Ich denke, Sie brauchen nicht "-exec rm" für gnu-find, da gibt es eine -Delete (aber nicht sicher über -PRfv: = verbose, force, Recursive, P?). Und Sie müssen '{}' nicht maskieren - sonst würde ich gerne upvote und akzeptiere es eine Antwort hier: http: // unix. stackexchange.com/q/8647/4485 –
Es gibt cd -
zu dem zuvor besuchten Verzeichnis zu gehen:
/usr/local/bin> cd /i/am/a/banana
/i/am/a/banana> cd -
/usr/local/bin>
... und dann gibt es all diese nützlichen Inkarnationen der BASH for-Schleife:
for file in *.txt; do ls $file; done
for item in $(echo foo bar baz); do echo $item; done
for num in {0..9}; do echo $num; done
eine lange Zeit, das irgendwo auf dem Netz vor gefunden:
function bashtips {
cat <<EOF
DIRECTORIES
-----------
~- Previous working directory
pushd tmp Push tmp && cd tmp
popd Pop && cd
GLOBBING AND OUTPUT SUBSTITUTION
--------------------------------
ls a[b-dx]e Globs abe, ace, ade, axe
ls a{c,bl}e Globs ace, able
\$(ls) \`ls\` (but nestable!)
HISTORY MANIPULATION
--------------------
!! Last command
!?foo Last command containing \`foo'
^foo^bar^ Last command containing \`foo', but substitute \`bar'
!!:0 Last command word
!!:^ Last command's first argument
!\$ Last command's last argument
!!:* Last command's arguments
!!:x-y Arguments x to y of last command
C-s search forwards in history
C-r search backwards in history
LINE EDITING
------------
M-d kill to end of word
C-w kill to beginning of word
C-k kill to end of line
C-u kill to beginning of line
M-r revert all modifications to current line
C-] search forwards in line
M-C-] search backwards in line
C-t transpose characters
M-t transpose words
M-u uppercase word
M-l lowercase word
M-c capitalize word
COMPLETION
----------
M-/ complete filename
M-~ complete user name
[email protected] complete host name
M-\$ complete variable name
M-! complete command name
M-^ complete history
EOF
}
Fügen Sie ein Leerzeichen (oder ein anderes Trennzeichen) nur hinzu, wenn eine Variable festgelegt ist, um unschöne unnötige Leerzeichen zu vermeiden.
$ first=Joe
$ last= # last name blank, the following echoes a space before the period
$ echo "Hello, $first $last. Welcome to..."
Hello, Joe . Welcome to...
$ echo "Hello, $first${last:+ $last}. Welcome to..."
Hello, Joe. Welcome to...
$ last=Green
$ echo "Hello, $first${last:+ $last}. Welcome to..."
Hello, Joe Green. Welcome to...
: > truncate-file-to-zero-bytes.txt # without changing its permissions
See: codesnippets.joyent.com/posts/show/2067
Hier ist ein anderes:
#!/bin/bash
# Shows the full path of files, good for copy pasting and for when
# listing the full paths is necessary.
# Usage: Run in the working directory (no path), otherwise takes the
# same file specification as ls.
for file in $(ls "[email protected]"); do
echo -n $(pwd)
[[ $(pwd) != "/" ]] && echo -n/
echo $file
done
Kürzere: 'readlink -f somefile' – Graham
Am Anfang eines Skripts, das als ausgeführt werden müssen, root:
if [ `id -u` != 0 ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Nice one! Ich habe mich gefragt, wie man root aus einem Skript erkennt. :-) –
Das '! = 0' ist überflüssig, und es kann zu 'test $ (id -u) && echo" Dies ... "&& exit 1' verkürzt werden –
@userunknown: Diese Zeile macht keinen Sinn. Wird die 'id -u' nicht mit der Benutzer-ID antworten, und unabhängig davon einen Exit-Status von 0 haben, es sei denn, du verwendest eine root-ID von 0 als Status irgendwie ... das ist die 1> & 2 ... in diesem interessanter Fall ... Ich überprüfe das – TechZilla
Ich benutze dies, um Quellcode von f einrücken unsere Räume und kopieren Sie das Ergebnis in die Zwischenablage in X:
cat src/Something.java | sed -e 's/^/ /g' | xsel
Jetzt Something.java ist bereit, durch mittlere Maustaste eingefügt werden. Ich weiß, ich kann den Ausdruck um eine Pipe reduzieren und die Katze entfernen, aber ich mag es auf diese Weise, weil ich es leichter finde, den Anfang zu bearbeiten, wenn ich den Ausdruck wiederverwende.
Eine effektive (und intuitive) Möglichkeit, einen vollständigen kanonischen Dateipfad für eine bestimmte Datei zu erhalten. Dies würde alle Fälle von symbolischen Links, relativer Dateireferenzen beheben, usw.
full_path="$(cd $(/usr/bin/dirname "$file"); pwd -P)/$(/usr/bin/basename "$file")"
ich diese viel in Verbindung verwenden, um mit Java-Entwicklung:
#!/bin/sh if [ "$1" == "" ] || [ "$2" == "" ]; then echo "Usage jarfinder.sh " exit fi SEARCH=`echo $2 | sed -e 's/[\\\/]/./g'` echo Searching jars and zips in $1 for "$SEARCH" find $1 -type f -printf "'%p'\n" | egrep "\.(jar|zip)'$" | sed -e "s/\(.*\)/echo \1 ; jar tvf \1 | sed -e 's\/^\/ \/' | grep -i \"$SEARCH\"/" | sh
, die ich in meinem collection of handy scripts halten.
ich auch diesen Einzeiler viel nutzen:
find . -name "*.java" | xargs grep -li "yadayada"
Ende dieses:
find . -name "*.java" | sed -e 's+\(.*\)+echo \1 ; yada_cmd \1+' | sh
Hier ist ein schöner grep
Ausdruck Leerzeilen und Kommentarzeilen zu entfernen:
grep -v '^[ \t]*$\|^[ \t]*#' /etc/ssh/sshd_config
Das obige zeigt die verwendeten Einstellungen in sshd_config
ohne Unordnung.
Ich benutze dies, um Anwendungen in ihrem eigenen Xterm-Fenster (oder nicht) von der gleichen Verbindung zu starten.
#!/bin/bash
#
# cli_app launcher -- detects where u are launching from; gui/tty
#
dev=`/usr/bin/tty`
case $dev in
/dev/pts/0 | /dev/pts/1) xterm -e /home/user/bin/cli_app ;; ## opens gui terminal
*) /home/user/bin/cli_app ;; ## opens where u are
esac
# eof #
!find:p ......... show last find command - not execute
# create one dir and go to
echo 'mkcd() { mkdir -p "[email protected]" && cd $_; }' >> ~/.bashrc
# backup file in single command
cp /path/too/long/to/file{,.backup}
Wenn Sie Ihr aktuelles Arbeitsverzeichnis in Ihrer Aufforderung haben ($PS1
) werden in einem Terminal mit nur 80 Spalten laufen, und manchmal in wirklich tiefen Hierarchien arbeiten, können Sie mit einem Ende Eingabeaufforderung, die bis auf 5 Zeichen Ihrer Zeile dauert. In diesem Fall sind die folgenden Erklärungen hilfreich:
PS1='${PWD##$PREFIX}$ '
PREFIX='' export PREFIX
prefix() {
PREFIX="$1"
}
prefix '*/'
Der prefix '*/'
Anruf Ihre prompte gesetzt wird nur das letzte Verzeichnis Element Ihrer aktuellen Arbeitsverzeichnis (statt den vollständigen Pfad) enthalten. Wenn Sie den gesamten Pfad anzeigen möchten, rufen Sie prefix
ohne Argumente auf.
Ich liebe den Backtick-Operator.
gcc `pkg-config <package> --cflags` -o foo.o -c foo.c
Und:
hd `whereis -b ls | sed "s/ls: //"` | head
Wissen Sie, ich habe eine effizientere Art und Weise von ‚head'ing die hexdump eines binären verpasst, die Sie nicht wissen, die Lage von ... oh und als ziemlich offensichtlich ist, „ls“ mit einer variablen ausgelagert werden kann, um in einem Skript würde es so etwas wie gehen:
#!/bin/bash
hd `whereis -b $1 | sed "s/$1: //"` | head
der praktische Nutzen der oben ist ziemlich begrenzt, aber es zeigt die Vielseitigkeit der Backtick operiert oder (und die Bash Shell) ziemlich gut, meiner bescheidenen Meinung nach.
- 1. Nützliche Liste des Visual C# Intellisense Code Studio 2010 Schnipsel
- 2. Nützliche Delphi-Code-Vorlagen
- 3. Bash-Schnipsel nicht in Make-Datei funktioniert
- 4. benutzerdefinierte Code-Schnipsel in Intellisense
- 5. Ungültige Code-Schnipsel in XHTML1.0
- 6. C++ funktionale Programmierung Code-Schnipsel
- 7. gsub arbeitet nicht im gesamten Code-Schnipsel
- 8. IntelliSense hat meine Code-Schnipsel vergessen!
- 9. Testen Sie kleine Schnipsel von Django Code
- 10. Kleiner Code-Schnipsel verursacht ghc nicht beenden
- 11. Was ist los mit diesem Code-Schnipsel?
- 12. Jquery Konflikt für Zurück-Taste Code-Schnipsel
- 13. Constructor Abhängigkeit Code-Schnipsel in Visual Studio
- 14. Was ist falsch an diesem Code-Schnipsel?
- 15. segmentierte Übertragungs Decoder, Code-Schnipsel für C
- 16. Visual Studio Code-Schnipsel zusätzliche Zeile
- 17. Nützliche Intellij Live Templates
- 18. Shell-Skript, analysieren XML-Schnipsel
- 19. Nützliche WPF-Dienstprogramme
- 20. Nützliche Regular Expression Tutorial
- 21. Nützliche Aktien SQL-Datenmodelle?
- 22. Nützliche Anpassungen in .ideavimrc
- 23. Netbeans nützliche Tastaturkürzel
- 24. Nützliche Projekte in Haskell
- 25. Nützliche TortoiseHg Erweiterungen
- 26. Nützliche PHP-Datenbank-Klasse
- 27. python-sphinx: Wie Linux-Befehl Code zu erhalten Schnipsel
- 28. Liste der funktionalen Code-Schnipsel für prozedurale Programmierer?
- 29. C++ Code-Schnipsel für eine neue Baby Grußkarte
- 30. Was ist der Unterschied zwischen diesen beiden Java-Code-Schnipsel?
Dies sollte Gemeinschaft Wiki –
Vielen Dank für den Hinweis! Jetzt ist es. –
Ich benutze '$ python' sehr viel. –