Wszyscy wiemy, jak używać <ctrl>-R
wyszukiwania wstecznego w historii, ale czy wiesz, że możesz użyć <ctrl>-S
wyszukiwania do przodu, jeśli ustawisz stty stop ""
? Ponadto, czy kiedykolwiek próbowałeś uruchomić bind -p, aby zobaczyć listę wszystkich swoich skrótów klawiaturowych? W systemie Mac OS X jest ich ponad 455.
Jaka jest Twoja najbardziej ulubiona niejasna sztuczka, skrót klawiaturowy lub konfiguracja sklepu za pomocą basha?
bash
command-line
Robert Harvey
źródło
źródło
Odpowiedzi:
Szybka zmiana nazwy / przenoszenie plików z przyrostkami:
cp /home/foo/realllylongname.cpp{,-old}
To rozszerza się do:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
źródło
Jest to odpowiednik przycisku Wstecz w linii poleceń (przenosi Cię do poprzedniego katalogu, w którym byłeś).
źródło
pushd
ipopd
utrzymywać stos katalogów.man cd
lubcd --help
(przynajmniej moim).Kolejny ulubiony:
Powtarza twoje ostatnie polecenie. Najbardziej przydatne w postaci:
źródło
mkdir testdir; cd !$
.. To działacd [last word of previous line]
(w przykładziecd testdir
)Moim ulubionym jest '^ string ^ string2', który przyjmuje ostatnie polecenie, zamienia string na string2 i wykonuje je
Przewodnik po historii linii poleceń Bash
źródło
!!:gs/ehco/echo/
!!:gs/ehco/echo/
wykonuje globalne wyszukiwanie i zamień przy ostatnim poleceniu (przyznaj!!
w stackoverflow.com/questions/68372/ ... ). To nie jest równoznaczne z^ehco^echo
zastąpieniem jednego wystąpienia „ehco” - dokładniejsza byłaby odpowiedź!!:s/ehco/scho
.Przemianować
Przykład:
Tak przydatne
źródło
Jestem fanem
!$
,!^
a!*
expandos, wracając z najnowszej linii złożone polecenia: ostatniego elementu pierwszego elementu zakaz poleceń i wszystkich elementów non-Command. To dowcip (zwróć uwagę, że powłoka najpierw wypisuje polecenie):Jest to przydatne, gdy, powiedzmy
ls filea fileb
, i chcesz edytować jeden z nich:vi !$
czy obie z nich:vimdiff !*
. Można go również uogólnić na „n
th argument” w następujący sposób:Wreszcie, dzięki nazwom ścieżek, możesz uzyskać dostęp do części ścieżki, dołączając
:h
i:t
do dowolnego z powyższych rozwinięć:źródło
Podczas uruchamiania poleceń czasami chcę uruchomić polecenie z poprzednimi argumentami. Aby to zrobić, możesz użyć tego skrótu:
Od czasu do czasu, zamiast używania funkcji find, przerywam pętlę jednowierszową, jeśli potrzebuję uruchomić kilka poleceń na liście plików.
Konfigurowanie opcji historii wiersza poleceń w moim .bash_login (lub .bashrc) jest naprawdę przydatne. Poniżej znajduje się zbiór ustawień, których używam na moim Macbooku Pro.
Ustawienie następujących opcji sprawia, że bash usuwa zduplikowane polecenia z historii:
Podnoszę też dość wysoki rozmiar mojej historii. Dlaczego nie? Wydaje się, że nie spowalnia to niczego w dzisiejszych mikroprocesorach.
Inną rzeczą, którą robię, jest ignorowanie niektórych poleceń z mojej historii. Nie musisz pamiętać polecenia wyjścia.
Na pewno chcesz ustawić histappend. W przeciwnym razie bash nadpisze twoją historię przy wyjściu.
Inną opcją, której używam, jest cmdhist. Umożliwia to zapisywanie poleceń wielowierszowych w historii jako jedno polecenie.
Wreszcie w systemie Mac OS X (jeśli nie używasz trybu vi), będziesz chciał zresetować <CTRL> -S przed zatrzymaniem przewijania. Uniemożliwia to bashowi zinterpretowanie tego jako wyszukiwania do przodu.
źródło
Jak wyświetlić tylko podkatalogi w bieżącym?
To prosta sztuczka, ale nie wiesz, ile czasu potrzebowałem, aby ją znaleźć!
źródło
alias lsd='ls -F | grep --color /'
, to wymienienie tego samego, ale w bardziej kiepski sposób. Jednak dla ułatwienia analizowania będzie zawierał jeden katalog w każdym wierszu. Zmodyfikowałem twoje polecenie, aby zrobić to samo:ls -d1 */
ESC.
Wstawia ostatnie argumenty z ostatniego polecenia bash. Przydaje się bardziej niż myślisz.
Płyta CD ESC.
źródło
Jasne, że możesz "
diff file1.txt file2.txt
", ale Bash obsługuje podstawianie procesów , co pozwaladiff
na wyświetlanie poleceń.Na przykład, powiedzmy, że chcę się upewnić, że mój skrypt daje oczekiwane wyniki. Mogę po prostu zawinąć mój skrypt w <() i przesłać go,
diff
aby uzyskać szybki i brudny test jednostkowy:Jako inny przykład, powiedzmy, że chcę sprawdzić, czy dwa serwery mają zainstalowaną tę samą listę RPM. Zamiast sshingować do każdego serwera, zapisywać każdą listę RPM w osobnych plikach i robić
diff
na tych plikach, mogę po prostu zrobić nadiff
mojej stacji roboczej:Więcej przykładów można znaleźć w Przewodniku po zaawansowanych skryptach Bash pod adresem http://tldp.org/LDP/abs/html/process-sub.html .
źródło
Moim ulubionym poleceniem jest „ls -thor”
Przywołuje moc bogów do sporządzania listy ostatnio zmodyfikowanych plików w wygodnym do odczytu formacie.
źródło
ls -bart -simpson -ruls
. S, ICNRls -lort
które jest duńskim słowem oznaczającym „gówno”. Pomijanie jakichkolwiek grup i nie dostaniesz gniewu Valhala :)Bardziej nowość, ale jest sprytna ...
10 najczęściej używanych poleceń:
Przykładowe dane wyjściowe:
źródło
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R wyszukiwanie wstecz. Naciśnij ^ R, wpisz fragment poprzedniego polecenia, które chcesz dopasować, i naciskaj ^ R, aż znajdziesz to, które chcesz. Wtedy nie muszę pamiętać ostatnio używanych poleceń, które wciąż są w mojej historii. Nie tylko bash, ale także: ^ E na koniec wiersza, ^ A na początek wiersza, ^ U i ^ K, aby usunąć odpowiednio przed i za kursorem.
źródło
Często mam aliasy dla vi, ls itp., Ale czasami chcesz uciec od aliasu. Po prostu dodaj ukośnik do polecenia z przodu:
Na przykład:
Fajnie, prawda?
źródło
command
- zobaczSHELL BUILTIN COMMANDS
w podręczniku Bash.Oto kilka poprawek konfiguracji:
~/.inputrc
:Działa to tak samo, jak
^R
przy użyciu klawiszy strzałek. Oznacza to, że mogę wpisać (np.), Acd /media/
następnie nacisnąć strzałkę w górę, aby przejść do ostatniej rzeczy, do której chciałbym wejśćcd
w/media/
folderze.(Używam terminala Gnome, może być konieczna zmiana kodów ucieczki dla innych emulatorów terminala.)
Uzupełnianie Bash jest również niezwykle przydatne, ale jest o wiele bardziej subtelnym dodatkiem. W
~/.bashrc
:Umożliwi to uzupełnianie tabulatorami dla każdego programu (np. Próba uzupełniania tabulatorami, gdy wiersz poleceń zaczyna się od,
evince
pokaże tylko pliki, które evince mogą otworzyć, a także opcje wiersza poleceń uzupełniania tabulatorami).Ładnie działa z tym również w
~/.inputrc
:źródło
Często używam:
:p
Modyfikator wydrukować wynik historii. Na przykładWydrukuje ostatnie polecenie, abyś mógł sprawdzić, czy jest poprawne, przed ponownym uruchomieniem. Po prostu wejdź,
!!
aby go wykonać.W podobnej żyle:
Przeszuka twoją historię w poszukiwaniu najnowszego polecenia, które zawierało ciąg „foo” i wydrukuje je.
Jeśli nie musisz drukować,
wyszukuje i wykonuje je od razu.
źródło
bind Space:magic-space # !pin<space>
Mam tajną broń: shell-fu.
Istnieją tysiące sprytnych wskazówek, fajnych sztuczek i skutecznych przepisów, które przez większość czasu mieszczą się w jednej linii.
Jeden, który kocham (ale trochę oszukuję, ponieważ używam faktu, że Python jest teraz zainstalowany na większości systemów Unix):
Teraz za każdym razem, gdy wpiszesz „webshare”, bieżący katalog będzie dostępny przez port 8000. Naprawdę fajnie, gdy chcesz udostępniać pliki znajomym w sieci lokalnej bez klucza USB lub zdalnego katalogu. Przesyłanie strumieniowe wideo i muzyki też będzie działać.
I oczywiście klasyczna bomba z widelcem, która jest całkowicie bezużyteczna, ale wciąż daje dużo radości:
Nie próbuj tego na serwerze produkcyjnym ...
źródło
python -m SimpleHTTPServer
(chyba że brakuje mi czegoś wyjątkowego, co robi oryginalne polecenieMożesz użyć polecenia obserwuj w połączeniu z innym poleceniem, aby wyszukać zmiany. Przykładem tego było, gdy testowałem router i chciałem uzyskać aktualne dane dotyczące takich rzeczy, jak stosunek sygnału do szumu itp.
źródło
w celu znalezienia wszystkich miejsc, w których dostępny jest PROG, zwykle gdzieś w ~ / bin, a nie w / usr / bin / PROG, którego można by się spodziewać.
źródło
PATH
, pokaże każdy z nich.Lubię konstruować polecenia za pomocą echa i przesyłać je do powłoki:
Czemu? Ponieważ pozwala mi spojrzeć na to, co zostanie zrobione, zanim to zrobię. W ten sposób, jeśli mam okropny błąd (na przykład podczas usuwania katalogu domowego), mogę go złapać, zanim to się stanie. Oczywiście jest to najważniejsze w przypadku działań destrukcyjnych lub nieodwołalnych.
źródło
$ find dir -name \\*~ -exec rm {} +
Podczas pobierania dużego pliku dość często robię:
A potem po prostu ctrl + c, kiedy skończę (lub jeśli
ls
zwraca wartość niezerową). Jest podobny dowatch
programu, ale zamiast tego używa powłoki, więc działa na platformach bezwatch
.Innym przydatnym narzędziem jest netcat lub
nc
. Jeśli zrobisz:Następnie możesz skonfigurować drukarkę na innym komputerze, ale zamiast tego użyj adresu IP komputera z uruchomionym programem Netcat. Gdy zadanie drukowania jest wysyłane, jest odbierane przez komputer z uruchomionym programem Netcat i wrzucane do
printjob.prn
.źródło
wget
?watch ls -la <filename>
(użyj -n5, jeśli nie lubisz domyślnych 2 sekund).watch
nie jest jednak dostępny na wszystkich platformach, takich jak Solaris, Mac OS X itp. @Porges, nie wiesz, co masz na myśli. Czy wget może również nasłuchiwać na porcie?pushd
ipopd
prawie zawsze się przydająźródło
Jednym z preferowanych sposobów nawigacji, gdy używam wielu katalogów w bardzo różnych miejscach w hierarchii drzewa, jest użycie acf_func.sh (wymienione poniżej). Po zdefiniowaniu możesz to zrobić
Płyta CD --
aby zobaczyć listę ostatnich katalogów z menu numerycznym
cd -2
aby przejść do drugiego najnowszego katalogu.
Bardzo łatwy w użyciu, bardzo poręczny.
Oto kod:
źródło
Rozwiń skomplikowane linie przed uderzeniem w przerażające wejście
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
&do.
źródło
Enter
:)Zawsze lubiłem:
Używam również
shopt -s cdable_vars
, wtedy możesz tworzyć zmienne bash do wspólnych katalogów. Dlatego dla drzewa źródłowego mojej firmy tworzę kilka zmiennych, takich jak:mogę przejść do tego katalogu według
cd Dcentmain
.źródło
screen
domyślnie klawiszem Escape . Zmieniam to na ctrl-X w moim.screenrc
, ale wtedy nie jestem użytkownikiem emacsa.pbcopy
Spowoduje to skopiowanie do schowka systemu Mac. Możesz przesłać do niego polecenia ... spróbuj:
pwd | pbcopy
źródło
alias pbcopy='xsel --clipboard --input'
ialias pbpaste='xsel --clipboard --output'
źródło
history 10
zamiasthistory | tail -10
(co powinno byćtail -n 10
przy okazji, ponieważ ta składnia jest przestarzała).Użycie 'set -o vi' z linii poleceń lub lepiej, w .bashrc, przełącza cię w tryb edycji vi w linii poleceń. Zaczynasz w trybie „wstaw”, więc możesz pisać i cofać jak zwykle, ale jeśli popełnisz „duży” błąd, możesz nacisnąć klawisz esc, a następnie użyć „b” i „f” do poruszania się, tak jak robisz to w vi. cw, aby zmienić słowo. Szczególnie przydatny po wywołaniu polecenia historii, które chcesz zmienić.
źródło
Podobnie jak w przypadku wielu powyższych, moim obecnie ulubionym jest naciśnięcie klawisza [alt]. (Klawisze Alt i „.” Razem) to jest to samo co $! (Wstawia ostatni argument z poprzedniego polecenia) poza tym, że jest natychmiastowy i dla mnie łatwiejszy do wpisania. (Po prostu nie można go używać w skryptach)
na przykład:
źródło
Połącz wiele poleceń razem, używając && polecenia :
lub
źródło