Antworten:
Dies erweitert etwas den !!
in dieser Antwort erwähnten Trick . Tatsächlich gibt es eine Reihe von geschichtsbezogenen Befehlen, die in Vergessenheit geraten (Menschen neigen dazu, Up100-mal zu stechen, anstatt nach einem Befehl zu suchen, von dem sie wissen, dass sie ihn eingegeben haben).
history
Befehl zeigt eine Liste der zuletzt ausgeführten Befehle mit einem Ereignisbezeichner links an!N
Ersetzt den Befehl, der dem Ereignisbezeichner zugeordnet ist N
!-N
das ersetzen N
th letzten Befehl; Ersetzt z. B. !-1
den letzten Befehl, !-2
den zweitletzten usw.!!
steht die Abkürzung für !-1
, um den letzten Befehl schnell zu ersetzen!string
ersetzt den neuesten Befehl, der mit beginnt string
!?string?
ersetzt den aktuellsten Befehl, der enthält string
Einem !
Verlaufsbefehl können Wortbezeichner hinzugefügt werden , um die Ergebnisse zu ändern. Ein Doppelpunkt trennt die Ereignis- und Wortbezeichner, z !!:0
. Der Ereigniskennzeichner !!
kann nur !
bei Verwendung eines Wortkennzeichners abgekürzt werden , !!:0
ist also äquivalent zu !:0
.
!:0
wird den Befehl erhalten, der ausgeführt wurde!:1
wird das erste Argument bekommen (und !:2
das zweite, etc.)!:2-3
wird das zweite und dritte Argument bekommen!:^
ist ein weiterer Weg, um das erste Argument zu bekommen. !:$
werde das letzte bekommen!:*
bekommt alle Argumente (aber nicht den Befehl)Modifikatoren können auch an einen !
Verlaufsbefehl angehängt werden , dem jeweils ein Doppelpunkt vorangestellt ist. Es kann eine beliebige Zahl aufgestapelt werden (zB !:t:r:p
).
h
- Richten Sie sich nach dem Basisdateinamen aust
- Nur der Basisdateinamer
- Richten Sie die Dateinamenerweiterung ause
- Nur die Dateinamenerweiterungs/search/replacement
- Ersetzen Sie das erste Vorkommen von search
durchreplacement
gs/search/replacement
- Ersetzen Sie alle Vorkommen von search
durchreplacement
!-#
auch nie . Ich !string
führe zwar den letzten Befehl aus, der mit einem String beginnt, führe ihn jedoch in der Regel mit einem Tabulator (zsh) aus, um sicherzustellen, dass ich das Richtige ausführe
!N
führt den Befehl aus ..." ist eine zu enge Beschreibung. wird tatsächlich !N
durch den Befehl ersetzt ...; und so weiter für alle Beschreibungen in der Antwort. Richtiger und eröffnen viel nützlichere Möglichkeiten! ZB das erwähnte sudo !!
.
bash
; In Emacs verwendet man stattdessen Meta-R (Meta-R wird auch eshell
in Emacs verwendet) , um die Historie der Eingabebefehle und -werte (für Mx oder andere gelesene Werte) zu durchsuchen . Also vermassle ich sie oft.
bash - füge den letzten Parameter der vorhergehenden Zeile ein
alt- . die nützlichste Tastenkombination aller Zeiten, probieren Sie es aus und sehen Sie, aus irgendeinem Grund weiß niemand etwas über diese.
Drücken Sie sie immer wieder, um ältere letzte Parameter auszuwählen.
ideal, wenn Sie etwas mehr mit dem Argument / der Datei machen möchten, das / die Sie gerade verwendet haben.
alt
- .
es wird zum vorherigen Befehl gehen und das letzte Argument daraus ziehen. Wenn Sie also das letzte Argument von vor drei Befehlen wollen, drücken Sie einfach alt
- .
dreimal.
yank-last-arg
Befehl readline. Sie sollte daher mit jedem Programm funktionieren, das mit readline verknüpft ist, nicht nur mit BASH oder ZSH.
Mein Liebling ist
man 7 ascii
Einfach und sehr nützlich.
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
Schauen Sie sich diese Website an: commandlinefu.com .
Sie können sich auch diese vier Artikel von Peteris Krumins in seinem Blog ansehen
ascii
Programm ist ebenfalls nützlich. Neben dem Drucken einer Tabelle können Sie auch einzelne Zeichen abfragen.
Ich bin nicht sicher, ob dies als "Trick" gilt, aber die Leute scheinen die Standard-Readline-Hotkeys nicht zu kennen. Von besonderem Nutzen in Muscheln:
Ctrl+L
entspricht dem FormFeed-ASCII-Zeichen. Normalerweise wird der Bildschirm in Textanwendungen mit einem Bildschirmfenster (z. B. vim, less, mc usw.) neu gezeichnet. Schön, wenn der Bildschirm durch eine Ausgabe eines anderen Programms "verschmutzt" wurde.
Ctrl+W
ein Wort rückwärts zu schneiden, Alt+F
zu gehen , um ein Wort vorwärts, Alt+B
um ein Wort rückwärts in einer Linie zu gehen. Ich mag Ctrl+Y
und Shift+Insert
weil du zwei kopierte Zeilen haben kannst. Eins mit Ctrl+U
(Einfügen mit Ctrl+Y
) und gleichzeitig können Sie ein anderes Wort kopieren (Zeile auswählen) Einfügen mit ( Shift+Insert
).
CTRL+ Rin BASH zum Suchen / Aktivieren von zuvor ausgeführten Befehlen (der Inhalt von ~ / .bash_history).
Dies ist oft sehr hilfreich. Wenn Sie diesen Alias ausführen, wird die PWD über HTTP (indiziert) auf Port 8000 bereitgestellt:
alias webserver="python -m SimpleHTTPServer"
Und weil ich laufe, die ganze Zeit mache und zu schnell spaziere und tippe, sind diese Aliase wahrscheinlich meine am häufigsten verwendeten (ernsthaften):
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
Und mein wahrscheinlich am häufigsten verwendetes Stück BASH ist ein einfaches Skript, das ich Upload nenne. Ich verwende es, um jegliche Art von Inhalten auf meinen Linode zu übertragen, und kopiere die resultierende HTTP-URL in meine Zwischenablage (mittlerer Klick). Sehr nützlich zum Einfügen von Inhalten in IRC-Benutzer:
scp -r $* $user@$host:public_html && {
URL="http://$host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
Nur ein Paar. Ich kann später viel mehr posten, muss mich wieder an die Arbeit machen!
alias mk=make
Schneller zu tippen und weniger wahrscheinlich falsch zu liegen. Oder kompilieren Sie mit einem Hotkey aus Ihrem Editor ...
alias m=make
, oder sogar m=make -j6
oder ähnlich - außer ich benutze bereits alias m=mutt
☺
Ziemlich einfach, aber die Leute scheinen es nicht zu wissen, und Sie kehren zum vorherigen Verzeichnis zurück:
cd -
cd..
von DOS ist in meinem Muskelgedächtnis verankert ...
cd
(ohne Argument), die Sie zu Ihrem Home-Verzeichnis führt.
Die Klammererweiterung ist ein Mechanismus, mit dem beliebige Zeichenfolgen generiert werden können.
Sie können damit mühsame Zeilen ersetzen wie:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
mit einer kürzeren Instanz
mv loong/and/complex/file/name{,backup}
einige andere Verwendungen
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
Arithmetische Erweiterung :
Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Substitution des Ergebnisses. Das Format für die arithmetische Erweiterung lautet:
$((expression))
Der Ausdruck wird so behandelt, als befände er sich in doppelten Anführungszeichen, ein doppeltes Anführungszeichen in Klammern wird jedoch nicht speziell behandelt. Alle Token im Ausdruck werden einer Parametererweiterung, einer Zeichenfolgenerweiterung, einer Befehlssubstitution und einer Entfernung von Anführungszeichen unterzogen. Arithmetische Erweiterungen können verschachtelt sein.
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
foo[123]
, die erweitert wird foo1 foo2 foo3
, aber es müssen Dateinamen sein, um in diesem Fall zu funktionieren
Dies ist normalerweise in meinem Startskript (.bashrc, .profile, was auch immer)
shopt
Meine Güte, überprüfen Sie die Kommentare:
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
Ein Alias, der Tastatureingaben speichert:
mkdir
und cd
hinein:
mkcd () { mkdir -p "$@" && cd "$@"; }
Und zu guter Letzt habe ich es aufgegeben, mir die TAR-Syntax zu merken.
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
mkcd
nur, dass ich ID benenne md
. Die Verwendung von "$ @" als Argument für cd macht jedoch keinen Sinn, da Sie nicht in mehr als ein einziges Verzeichnis cd können. "$ @" wird für mkdir funktionieren, aber dann behandeln Sie Argumente für mkdir und cd anders, also würde ich eher vorschlagenmd () { mkdir -p "$1"; cd "$1" }
Zwei Bash-Funktionen, die mir viele Tastenanschläge ersparen.
Mache nach jeder erfolgreichen CD automatisch ein ls:
function cd {
builtin cd "$@" && ls
}
Gehe auf n Ebenen:
# Usage .. [n]
function .. (){
local arg=${1:-1};
local dir=""
while [ $arg -gt 0 ]; do
dir="../$dir"
arg=$(($arg - 1));
done
cd $dir #>&/dev/null
}
builtin foo
, dass man eine definierte Funktion umgehen kann cd
. Ich habe chdir
in meinen Funktionen verwendet. Handy
cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Da ich normalerweise auf halber Strecke in einer Befehlszeile bin, bevor ich suchen möchte (STRG-R in Bash), habe ich Folgendes in meinem .bashrc
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
Das bedeutet, wenn ich cd eingebe und dann hoch / runter drücke, kann ich alle Optionen sehen, die ich für cd hatte. Grundsätzlich benutze ich dies für häufig verwendete Verzeichnisse. Wie "cd w" und am Ende gehe ich alle Arbeitsbereiche durch, die ich viel benutze.
Eine Sache, die mir viel Zeit spart, sind die pushd / popd-Befehle. Mit diesen Typen können Sie einen Stapel von Verzeichnissen erstellen und das Tippen erheblich reduzieren:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
u
und o
für hier stehen?
setopt autopushd
und alle Verzeichnisänderungen werden automatisch Push
Der screen
Befehl . Grundsätzlich wird Ihre Befehlszeilensitzung für den Zeitpunkt Ihrer Rückkehr gespeichert. Es ist eine Art Terminalmanager, wie ein Fenstermanager. Auf diese Weise können in einer einzelnen Terminalsitzung mehrere virtuelle Terminals ausgeführt werden. Es ist sehr cool.
Wenn man es benutzt screen
, ist diese Shell-Funktion .bashrc
extrem nützlich:
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
Nach der Eingabe scr
wird überprüft, ob Ihre Hauptsitzung vorhanden ist, und es wird eine Verbindung dazu hergestellt. Andernfalls wird es erstellt.
Wenn Sie eine besonders lange Befehlszeile in Bash bearbeiten müssen
^X^E (Ctrl-X Ctrl-E)
öffnet es im Editor ($ EDITOR).
In zsh können Sie dasselbe Verhalten erzielen, indem Sie Folgendes zu .zshrc hinzufügen:
autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line
Wenn Sie ein schneller Schreibkraft sind, sind diese nützlich:
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
Mit diesem Makro können Sie die Gesamtsummen einer Ausgabespalte berechnen: Dateigrößen, Bytes, Pakete. Sie müssen lediglich die Spalte angeben, die Sie hinzufügen möchten:
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
Wenn Sie es zum Beispiel so verwenden, ohne Argumente, addiert es die Summe der ersten Spalte:
du | total
Wenn Sie das Argument angeben, wird diese Spalte summiert. Dies gibt beispielsweise die Gesamtzahl der Bytes an, die von allen C # -Dateien in / tmp verwendet werden:
ls -l /tmp/*cs | total 5
Manchmal kommt es vor, dass Ihre Konsole nicht mehr funktioniert, weil Sie versehentlich eine Binärdatei angezeigt haben (z. B. cat / bin / ls). Sie können das Terminal mit der folgenden Shell-Funktion wiederherstellen:
restaura ()
{
perl -e 'print "\e)B";'
}
Ich mag es, wenn mein l Zeichen verwendet, um die Dateiklasse zu unterscheiden und die von meinem Editor generierten Sicherungsdateien auszublenden (Sicherungsdateien enden mit dem Zeichen ~):
alias ls='ls -FB'
s/fast/sloppy/
reset
wo Sie verwenden restaura
.
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
Einer meiner Favoriten, wenn ich vergesse s
:
$ s !! # last command with super user priviledges
bindkey -s '\e[12~' "sudo !!\n"
(in diesem Fall) F2 binden, um diesen Befehl auszuführen. Ich habe diese Bindung, also wenn ich etwas starte und die Fehlermeldung "Sie haben 'sudo', Idiot 'vergessen" sehe, kann ich nur verärgert auf F2 stechen
Wenn ein Befehl stdin eingibt, können Sie die Eingabe aus einer Datei mit lesen <filename
. Dies kann an einer beliebigen Stelle im Befehl erscheinen, daher sind diese Zeilen gleichbedeutend:
cat filename
cat <filename
<filename cat
Dies ist besonders nützlich für grep, da Sie den Ausdruck am Ende der Zeile platzieren können, sodass Sie einen grep-Befehl durch Drücken schnell ändern können Up, ohne nach links scrollen zu müssen, um den Dateinamen zu überschreiten:
<filename grep 'expression'
<input foo | bar | baz >output
, funktioniert es nicht, wenn Sie versuchen, einige Shell-Loop-Primitive wie while
oder for
in der Mitte zu mischen . Also habe ich aufgegeben und es am Ende laut Konvention hingestellt.
Mit können Sie CDPATH
das Verzeichnis einrichten, das dem entspricht PATH
. Wenn Sie es versuchen cd foo
und foo
im aktuellen Verzeichnis kein Verzeichnis vorhanden ist, prüft die Shell jedes der Verzeichnisse, nach denen sie CDPATH
sucht foo
, und wechselt zu dem ersten Verzeichnis, das sie findet:
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
Denn wenn Sie nicht wissen, wo etwas lebt, und es Ihnen auch nichts ausmacht.
which
automatisch aufzurufen , alsovi =scriptname
$(scriptname)
Das kaufmännische Und . Der Befehl wird in den Hintergrund gestellt, sodass Sie mit der Eingabe fortfahren können.
$> sudo updatedb &
Arbeiten Sie mit und nach einer Weile sehen Sie:
[1] 17403
Und Ihr Prozess ist fertig! Großartig für Dinge, bei denen Sie nicht darauf warten müssen, dass sie beendet werden.
&!
den Job an den Hintergrund an und schließen Sie ihn aus der Shell aus!
bash
.
nohup
erreicht wird.
Tab Vervollständigung . Wie schlimm wäre es, wenn Sie alle Zeichen jedes Pfades eingeben müssten?
rm -fr /
. Also ja, Tab-Vervollständigung ist ziemlich wichtig ...
ls /usr/lib/game-d*/rott*
rm -rf /
in den meisten Linux-Systemen nicht deaktiviert?
Umount last mounted device:
mount /media/whatever
...
u!mo
!mo
wird auf den letzten Befehl erweitert, mit dem begonnen wurde mo
(zumindest in Bash). Manchmal tut man das mv
in der Mitte, deshalb u!m
funktioniert es nicht so oft.
Ich habe dies in meinem .bashrc
#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
function find-all() {
python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
Und wenn ich HTML-Quellcode in der Zwischenablage habe und alle Links finden möchte, die ich verwende
c-v | find-all 'href="([^"]*)"' | c-c
Und ich habe alle URLs in der Zwischenablage
Ich habe auch diese Funktion
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
welche Anzeigegröße (von Menschen lesbar) und Dateiname.
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
Dieser Alias ist für die Show-Temperatur
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
Mit dieser Funktion kann ich das Produkt oder die Summe der Argumente berechnen.
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}
Dies ist eine nützliche Funktion, die die Standardeingabe durch Regex getrennt aufteilt und dann das Ergebnis zusammenfügt.
function factorial() {
seq -s* $1 | bc
}
Fakultätsfunktion
function wiki() { dig +short txt $1.wp.dg.cx; }
Diese Funktion zeigt Wiki-Text über DNS an
Ich habe auch drei Farbfunktionen
function blue() {
echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}
function green() {
echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}
function red() {
echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}
function md5check() {
test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}
Diese Funktion validiert die Datei md5 hash.
Dies zeigt eine Fehlermeldung für einen bestimmten Code an
function strerror() { python -c "import os; print os.strerror($1)"; }
Sie können alle Nachrichten mit ausdrucken
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
Ein weiterer nützlicher ZSH-Trick:
Behandle die Ausgabe eines Befehls als Datei:
emacs =(hg cat -r 100 somefile)
Dadurch wird eine alte Version einer Mercurial-Datei in Emacs zur syntaktisch hervorgehobenen Anzeige geöffnet. Ohne das würde ich zu verwirren haben um mit hg revert
, hg archive
oder explizit senden hg cat
Ausgabe in eine temporäre Datei.
Dies funktioniert natürlich mit jedem Programm, das Dateien öffnet, und mit jedem Programm, das auf Standardausgabe druckt.
Eine ZSH-spezifische Funktion sind Suffix-Aliase, die durch Angabe alias
des -s
Flags festgelegt werden:
alias -s ext=program
Wenn eine bestimmte Erweiterung einen Suffix-Alias hat, können Sie eine Datei mit dieser Erweiterung direkt ausführen, und ZSH startet das angegebene Programm und übergibt den Dateinamen als Argument. Wenn der obige Alias aktiviert ist, sind diese Zeilen äquivalent:
/path/to/foo.ext
program /path/to/foo.ext
Eine meiner beliebtesten ZSH-Funktionen ist die Verwendung von Verzeichnissen. Sie können eine Variable mit einem bestimmten Namen und einem Wert exportieren, der auf einen bestimmten Pfad verweist:
export foo=/usr/bin
Jetzt können Sie ~foo
in einem Befehl auf Folgendes verweisen /usr/bin
:
cd ~foo
~foo/ls
cat ~foo/filename
Siehe diese Frage .
Wenn du rennst ps ax | grep string
:
[steve@sage-arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
Die letzte Zeile grep
ist etwas nervig
Sie können sich davon befreien, indem Sie Folgendes ausführen ps ax | grep '[s]tring'
:
[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
update : oder einfach ausführenpgrep string
'[o]penbox'
) zitieren . Die Klammern funktionieren wie ein Globus. Wenn sich also Openbox in Ihrem Verzeichnis befindet (sagen wir, Sie sind in diesem Verzeichnis /usr/bin
), verwendet bash nur Openbox, wodurch der Grep-Trick verhindert wird.
Der Do-Nothing-Befehl :
wie in
while :; do :; done
Klammererweiterung in Kombination mit for-Schleifen:
for c in {1..3}; do :; done
!
Betreiber und Kurzschlussbetreiber ||
und&&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
Verwenden von Subshells anstelle von Pop / Push (nützlich in Skripten)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
die Art von was ist Befehltype
~$ type type
type is a shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
auch sehr schön: hier-saiten
~$ cat <<<"here $PWD"
here /home/yourname
~$
und mein Favorit: Umleitung auf eine Befehlsliste
{ w; ps; ls /tmp; } 2>/dev/null |less
Ich liebe es, so viel Zeug wie möglich in meine PS1 zu schmeißen. Einige nützliche Dinge, an die Sie sich erinnern sollten:
\e[s
und \e[u
speichern bzw. nicht speichern Sie die Cursorposition. Ich benutze dies, um eine 'Info-Leiste' am oberen Bildschirmrand zu erstellen, die ein paar Zeilen lang ist und mehr Platz bietet. Beispiel:
PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '
Kombinieren Sie mit alias clear='echo -e "\e[2J\n"'
. Versuch es!
Außerdem PROMPT_COMMAND
definiert die Variable einen Befehl, der jedes Mal vor der PS1 ausgeführt wird.
Ein anderer ist der bg
Befehl. Wenn Sie vergessen , setzen &
am Ende eines Befehls, drücken Sie einfach ^Zund Art bg
, und es läuft im Hintergrund.
bg
, wenn ich ein programm im hintergrund laufen habe und versehentlich drücke fg
ich weiß nicht wie ich es zurückschieben soll: D
PS1
so dass ich die meisten Dinge, die ich will, in mein Bildschirm-Fazit setzen ...