Odpowiedzi:
Rozszerza to nieco !!
sztuczkę wspomnianą w tej odpowiedzi . W rzeczywistości istnieje wiele poleceń związanych z historią, o których często się zapomina (ludzie mają tendencję do dźgania Up100 razy zamiast szukania polecenia, o którym wiedzą, że je wpisali).
history
Komenda pokaże listę ostatnio uruchamianych poleceń z desygnatora zdarzeń w lewo!N
zastąpi polecenie związane z desygnatorem zdarzenia N
!-N
będzie zastąpić N
th ostatnią komendę; np. !-1
zastąpi ostatnie polecenie, !-2
drugie ostatnie itd.!!
jest skrótem !-1
, aby szybko zastąpić ostatnie polecenie!string
zastąpi ostatnie polecenie, które zaczyna się od string
!?string?
zastąpi najnowsze polecenie, które zawiera string
Oznaczenia słów można dodać do !
polecenia historii, aby zmodyfikować wyniki. Dwukropek oddziela oznaczenia zdarzenia i słowa, np !!:0
. Oznaczenie zdarzenia !!
można skrócić do samego !
oznaczenia słowa, więc !!:0
jest to równoważne z !:0
.
!:0
dostanie polecenie, które zostało wykonane!:1
dostanie pierwszy argument (i !:2
drugi itd.)!:2-3
dostanie drugi i trzeci argument!:^
to kolejny sposób na uzyskanie pierwszego argumentu. !:$
dostanie ostatni!:*
otrzyma wszystkie argumenty (ale nie polecenie)Modyfikatory można również dołączyć do !
polecenia historii, każdy poprzedzony dwukropkiem. Dowolną liczbę można układać (np !:t:r:p
.).
h
- Wyrównaj do podstawowej nazwy plikut
- Tylko podstawowa nazwa plikur
- Ustaw zgodnie z rozszerzeniem nazwy plikue
- Tylko rozszerzenie nazwy plikus/search/replacement
- Wymienić pierwsze wystąpienie search
zreplacement
gs/search/replacement
- zastąpić wszystkie wystąpienia search
zreplacement
!-#
. Używam !string
do uruchomienia ostatniego polecenia, które zaczyna się od łańcucha, ale generalnie najpierw kompletuję je tabulatorem (zsh), aby upewnić się, że działam poprawnie
!N
uruchomi polecenie ...” jest zbyt wąskim opisem; faktycznie !N
zostanie zastąpione poleceniem ...; i tak dalej dla wszystkich opisów w odpowiedzi. Więcej poprawnych i otwierających o wiele bardziej użytecznych możliwości! Np sudo !!
. Wspomniane .
bash
; w Emacs, aby przeglądać historię poleceń wejściowych i wartości (dla Mx lub innych odczytanych wartości), zamiast tego używa się Meta-R (Meta-R jest również używany eshell
w Emacs). Więc często je psuję.
bash - wstaw ostatni parametr poprzedniego wiersza
alt- . najbardziej użyteczna kombinacja klawiszy w historii, spróbuj i przekonaj się, z jakiegoś powodu nikt o niej nie wie.
naciśnij kilkakrotnie, aby wybrać starsze ostatnie parametry.
świetnie, gdy chcesz zrobić coś więcej z argumentem / plikiem, którego użyłeś przed chwilą.
alt
- .
przejdzie do poprzedniego polecenia i wyciągnie z niego ostatni argument. Więc jeśli chcesz ostatni argument z trzech poleceń temu, po prostu naciśnij alt
- .
trzy razy.
yank-last-arg
polecenia readline, więc powinno działać z każdym programem powiązanym z readline, nie tylko BASH lub ZSH.
Moim ulubionym jest
man 7 ascii
Prosty i bardzo przydatny.
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
Zajrzyj na tę stronę Commandlinefu.com .
Możesz również zapoznać się z tymi czterema artykułami Peterisa Kruminsa na jego blogu
ascii
program . Oprócz wydrukowania tabeli umożliwia ona zapytanie o jeden lub więcej pojedynczych znaków.
Nie jestem pewien, czy liczy się to jako „sztuczka”, ale ludzie wydają się bardzo nieświadomi standardowych skrótów klawiszowych readline. Szczególnego zastosowania w muszlach:
Ctrl+L
odpowiada znakowi FormFeed ascii. Zazwyczaj przerysowuje ekran w aplikacjach tekstowych z oknem ekranowym (np. Vim, less, mc itp.). Fajnie, jeśli ekran został „zanieczyszczony” przez dane wyjściowe z innego programu.
Ctrl+W
wycinanie jednego słowa do tyłu, przewijanie Alt+F
do przodu o jedno słowo, przewijanie Alt+B
do tyłu o jedno słowo w linii. Lubię Ctrl+Y
i Shift+Insert
ponieważ możesz mieć dwie skopiowane linie. Jeden za pomocą Ctrl+U
(wklej go za pomocą Ctrl+Y
) i jednocześnie możesz skopiować inne słowo (wybierz linię) wklej za pomocą ( Shift+Insert
).
CTRL+ Rw BASH do wyszukiwania / aktywacji wcześniej wykonanych poleceń (zawartość ~ / .bash_history).
Jest to często bardzo pomocne. Uruchomienie tego aliasu będzie obsługiwać PWD przez HTTP (indeksowane) na porcie 8000:
alias webserver="python -m SimpleHTTPServer"
A ponieważ cały czas biegam, piszę i piszę zbyt szybko, te aliasy są prawdopodobnie najczęściej używane (poważnie):
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
I prawdopodobnie moim najczęściej używanym fragmentem BASH jest prosty skrypt, który nazywam uploadem. Używam go do blitowania wszelkiego rodzaju treści do mojej Linode, i kopiuje wynikowy adres URL HTTP do mojego schowka (środkowe kliknięcie). Bardzo przydatne do wklejania rzeczy do ludzi w IRC:
scp -r $* $user@$host:public_html && {
URL="http://$host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
Tylko para. Mogę pisać o wiele później, muszę wrócić do pracy!
alias mk=make
Szybsze pisanie i mniejsze prawdopodobieństwo popełnienia błędu. Lub skompiluj z edytora za pomocą skrótu ...
alias m=make
, lub nawet m=make -j6
lub podobny - z wyjątkiem używam już alias m=mutt
☺
Całkiem proste, ale wydaje się, że ludzie nie wiedzą, wraca do poprzedniego katalogu:
cd -
cd..
od DOS jest zakorzenione w mojej pamięci mięśni ...
cd
(bez argumentów), który zabierze Cię do twojego katalogu domowego.
Rozwijanie nawiasów to mechanizm, za pomocą którego można generować dowolne ciągi.
Pozwala zastąpić żmudne linie, takie jak:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
z krótszą instancją
mv loong/and/complex/file/name{,backup}
niektóre inne zastosowania
# 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
Rozbudowa arytmetyczna :
Rozwinięcie arytmetyczne pozwala na ocenę wyrażenia arytmetycznego i podstawienie wyniku. Format interpretacji arytmetycznej jest następujący:
$((expression))
Wyrażenie jest traktowane tak, jakby znajdowało się w podwójnych cudzysłowach, ale podwójne cudzysłowy w nawiasach nie są traktowane specjalnie. Wszystkie tokeny w wyrażeniu podlegają interpretacji parametrów, interpretacji ciągów, zastępowaniu poleceń i usuwaniu cytatów. Rozszerzenia arytmetyczne mogą być zagnieżdżone.
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
foo[123]
który się rozszerzy foo1 foo2 foo3
, ale w tym przypadku muszą być nazwami plików
Zazwyczaj jest to w moim skrypcie startowym (.bashrc, .profile, cokolwiek)
shopt
Boże, sprawdź komentarze:
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
Alias, który zapisuje naciśnięcia klawiszy:
mkdir
i cd
do niego:
mkcd () { mkdir -p "$@" && cd "$@"; }
I na koniec zrezygnowałem z zapamiętywania składni tar, więc:
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
tej, którą nazywam id md
. Jednak użycie „$ @” jako argumentu dla cd nie ma żadnego sensu, ponieważ nie można cd do więcej niż jednego katalogu. „$ @” będzie działać dla mkdir, ale wtedy inaczej md () { mkdir -p "$1"; cd "$1" }
Dwie funkcje bash, które oszczędzają mi wielu naciśnięć klawiszy.
Wykonuj automatycznie ls po każdym udanym cd:
function cd {
builtin cd "$@" && ls
}
Idź w górę o poziomy:
# 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
obejście, mając zdefiniowaną funkcję cd
; Korzystałem chdir
z moich funkcji. Przydatny
cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Ponieważ zwykle jestem w połowie drogi do wiersza poleceń, zanim chcę wyszukiwać (CTRL-R w bash), mam następujące .bashrc
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
Oznacza to, że jeśli wpisuję cd, a następnie naciskam góra / dół, widzę wszystkie opcje, które mam cd. Zasadniczo używam tego do często używanych katalogów. Jak „cd w” i kończę przeglądanie wszystkich obszarów roboczych, z których często korzystam.
Jedną z rzeczy, która oszczędza mi dużo czasu, są polecenia pushd / popd. Ci faceci pozwalają ci stworzyć stos katalogów i znacznie ograniczyć pisanie:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
u
i o
oznaczają tutaj?
setopt autopushd
i wszystkie zmiany katalogów będą się wypychać automatycznie
screen
Polecenia . Zasadniczo zapisuje sesję wiersza poleceń na wypadek powrotu. To rodzaj menedżera terminali, jak menedżer okien. W ten sposób w jednej sesji terminala możesz mieć wiele wirtualnych terminali. To jest bardzo fajne.
Jeśli się używa screen
, ta funkcja powłoki (włóż ją .bashrc
) jest niezwykle przydatna:
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
po wpisaniu scr
sprawdzi, czy twoja sesja główna istnieje i dołączy do niej. W przeciwnym razie go utworzy.
Jeśli potrzebujesz edytować szczególnie długą linię poleceń w bash
^X^E (Ctrl-X Ctrl-E)
otworzy go w edytorze ($ EDITOR).
W zsh możesz uzyskać takie samo zachowanie, dodając to do .zshrc:
autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line
Jeśli jesteś szybkim maszynistą, przydadzą się:
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
To makro pomaga obliczyć sumy kolumny danych wyjściowych: rozmiary plików, bajty, pakiety, wszystko co musisz zrobić, to określić kolumnę, którą chcesz dodać:
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
Używasz go w ten sposób, na przykład, bez argumentów, dodaje sumę pierwszej kolumny:
du | total
Jeśli podasz argument, suma ta kolumna, na przykład, daje całkowitą liczbę bajtów używanych przez wszystkie pliki C # w / tmp:
ls -l /tmp/*cs | total 5
Czasami twoja konsola się popsuła, ponieważ przypadkowo obejrzałeś plik binarny (na przykład cat / bin / ls), możesz przywrócić terminal za pomocą tej funkcji powłoki:
restaura ()
{
perl -e 'print "\e)B";'
}
Lubię, aby moje znaki używały znaków do rozróżniania klasy plików, a także do ukrywania plików kopii zapasowych generowanych przez mój edytor (pliki kopii kończą się znakiem ~):
alias ls='ls -FB'
s/fast/sloppy/
reset
tam, gdzie używasz restaura
.
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
Jeden z moich ulubionych, gdy zapomnę s
:
$ s !! # last command with super user priviledges
bindkey -s '\e[12~' "sudo !!\n"
powiązanie (w tym przypadku) F2, aby uruchomić to polecenie. Mam to powiązanie, więc kiedy coś uruchomię i zobaczę komunikat o błędzie „zapomniałeś sudo”, głupcze ”, mogę po prostu dźgnąć F2 z irytacją
Jeśli polecenie pobiera standardowe wejście, możesz je odczytać z pliku za pomocą <filename
. Może pojawić się w dowolnym miejscu polecenia, więc te linie są równoważne:
cat filename
cat <filename
<filename cat
Jest to szczególnie przydatne w przypadku grep, ponieważ pozwala umieścić wyrażenie na końcu wiersza, dzięki czemu można szybko zmodyfikować polecenie grep, naciskając go Up, bez potrzeby przewijania w lewo, aby ominąć nazwę pliku:
<filename grep 'expression'
<input foo | bar | baz >output
, nie działa, jeśli spróbujesz wmieszać się w niektóre prymitywy zapętlające powłoki, takie jak while
lub for
w środku. Więc poddałem się i po prostu położyłem to na końcu zgodnie z konwencją.
Możesz użyć, CDPATH
aby skonfigurować katalog równoważny z PATH
; jeśli spróbujesz cd foo
i nie ma go foo
w bieżącym katalogu, powłoka sprawdzi każdy katalog, który go CDPATH
szuka foo
, i przełączy się do pierwszego, który znajdzie:
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
Bo kiedy nie wiesz, gdzie coś mieszka, i ciebie też to nie obchodzi.
which
automatycznie, więcvi =scriptname
$(scriptname)
Znak handlowe i . Umieszcza twoje polecenie w tle, dzięki czemu możesz kontynuować pisanie.
$> sudo updatedb &
Pracując dalej, a po chwili zobaczysz:
[1] 17403
I twój proces jest zakończony! Idealne do rzeczy, w których nie trzeba czekać na zakończenie.
&!
do zadania i usuń go z powłoki!
bash
.
nohup
to.
Uzupełnianie tabulatorów . Jak źle by to było, gdybyś musiał wpisać wszystkie postacie z każdej ścieżki?
rm -fr /
. Więc tak, uzupełnianie Tab jest bardzo istotne ...
ls /usr/lib/game-d*/rott*
rm -rf /
wyłączone w większości systemów Linux?
Umount ostatnio zamontowane urządzenie:
mount /media/whatever
...
u!mo
!mo
rozwija się do ostatniego polecenia, które rozpoczęło się mo
(przynajmniej w bash). Czasami robi się to mv
w środku, więc u!m
nie będzie tak często działać.
Mam to w moim .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]"
}
A kiedy mam kod źródłowy HTML w schowku i chcę znaleźć wszystkie linki, których używam
c-v | find-all 'href="([^"]*)"' | c-c
I mam wszystkie adresy URL w schowku
Mam również tę funkcję
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
który rozmiar wyświetlacza (czytelny dla człowieka) i nazwa pliku.
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
ten alias dotyczy temeratury programu
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
za pomocą tej funkcji mogę obliczyć iloczyn lub sumę argumentów.
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()))";
}
Jest to przydatna funkcja, która dzieli standardowe wejście oddzielone wyrażeniem regularnym, a następnie łączy wynik.
function factorial() {
seq -s* $1 | bc
}
funkcja silnia
function wiki() { dig +short txt $1.wp.dg.cx; }
Ta funkcja wyświetla tekst wiki przez DNS
Mam również trzy funkcje kolorów
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]
}
Ta funkcja sprawdza poprawność pliku md5.
pokaże to komunikat o błędzie dla danego kodu
function strerror() { python -c "import os; print os.strerror($1)"; }
Możesz wydrukować wszystkie wiadomości za pomocą
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
Kolejna przydatna sztuczka ZSH:
Traktuj wyjście polecenia jako plik:
emacs =(hg cat -r 100 somefile)
Spowoduje to otwarcie starej wersji pliku śledzonego przez Mercurial w emacsie do wyświetlania z wyróżnieniem składni. Bez tego, że będę musiał poeksperymentować z hg revert
, hg archive
lub bezpośrednio wysłać hg cat
wyjście do pliku tymczasowego.
Oczywiście działa to z każdym programem, który otwiera pliki i każdym programem, który drukuje na standardowe wyjście.
Cechą specyficzną jest ZSH aliasy sufiks, określone przez podanie alias
na -s
flagę:
alias -s ext=program
Jeśli dane rozszerzenie ma alias sufiksu, możesz wykonać plik z tym rozszerzeniem bezpośrednio, a ZSH uruchomi dany program i przekaże nazwę pliku jako argument. Więc jeśli obowiązuje powyższy alias, te linie są równoważne:
/path/to/foo.ext
program /path/to/foo.ext
Jedną z moich ulubionych funkcji ZSH są katalogi. Możesz wyeksportować zmienną o podanej nazwie, której wartość wskazuje określoną ścieżkę:
export foo=/usr/bin
Teraz możesz użyć ~foo
w poleceniu odniesienia do /usr/bin
:
cd ~foo
~foo/ls
cat ~foo/filename
Zobacz to pytanie .
Kiedy biegniesz 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
ostatnia linia zawierająca grep
jest nieco denerwująca
Możesz się tego pozbyć, uruchamiając 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
aktualizacja : lub po prostu uruchompgrep string
'[o]penbox'
). Nawiasy będą działać jak glob, więc jeśli w twoim katalogu znajduje się openbox (powiedz, że jesteś /usr/bin
), bash po prostu użyje openbox, co zapobiegnie sztuczce grep.
Komenda „nic nie rób” :
jak w
while :; do :; done
Rozszerzenie nawiasu klamrowego w połączeniu z pętlą for:
for c in {1..3}; do :; done
!
operatorzy i operatorzy zwarć ||
oraz&&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
używanie podpowłok zamiast pop / push (przydaje się w skryptach)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
niby-of co-jest komendatype
~$ type type
type is a shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
również bardzo ładne: tutaj-stringi
~$ cat <<<"here $PWD"
here /home/yourname
~$
i moje ulubione: przekierowanie na listę poleceń
{ w; ps; ls /tmp; } 2>/dev/null |less
Uwielbiam wrzucać jak najwięcej rzeczy do mojego PS1. Kilka przydatnych rzeczy do zapamiętania:
\e[s
i odpowiednio \e[u
zapisz i cofnij pozycję kursora. Używam tego, aby u góry ekranu utworzyć „pasek informacyjny” o długości kilku linii, który może pomieścić więcej rzeczy. Przykład:
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\]\$ '
Połącz z alias clear='echo -e "\e[2J\n"'
. Wypróbuj to!
Ponadto, PROMPT_COMMAND
zmienna określa polecenie do wykonania przed PS1 za każdym razem.
Kolejnym jest bg
polecenie. Jeśli zapomnisz umieścić &
na końcu polecenia, po prostu naciśnij ^Zi wpisz bg
, a zostanie ono uruchomione w tle.
bg
, kiedy mam program działający w tle i przypadkowo naciśnij fg
Nie wiem, jak go odepchnąć: D
PS1
więc umieszczam większość rzeczy, które chcę w dolnej linii ekranu ...