Qual è il tuo trucco della riga di comando più preferito usando Bash? [chiuso]


156

Sappiamo tutti come utilizzare <ctrl>-Rper invertire la ricerca nella cronologia, ma sapevi che puoi utilizzare <ctrl>-Sper inoltrare la ricerca se hai impostato stty stop ""? Inoltre, hai mai provato a eseguire bind -p per vedere tutte le scorciatoie da tastiera elencate? Ci sono oltre 455 su Mac OS X per impostazione predefinita.

Qual è il tuo singolo trucco oscuro preferito, scorciatoia da tastiera o configurazione shopt usando bash?


2
Si prega di riformulare questo per dire "Qual è il tuo singolo preferito". Ciò consente alle persone di votare le risposte specifiche, quasi come un sondaggio.
SCdF,

> Si prega di riformulare questo per dire "Qual è il tuo singolo preferito più". Fatto.
Martin Klinke,

1
V'è un clone StackOverflow per questa domanda: commandlinefu.com
RKB

Solo 232 di questi 455 tasti di scelta rapida predefiniti fanno qualcosa di diverso da "autoinserimento" ("digita questo tasto"): $ bind -p | grep -v autoinserimento | wc
Ed Brannin,

Alcune cose pulite qui. Ma va notato che alcuni di loro funzionano solo quando la bash è in modalità emacs ...
Mo.

Risposte:


157

Rinominare / spostare rapidamente i file con i suffissi:
cp /home/foo/realllylongname.cpp{,-old}

Questo si espande a:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old


12
Eccezionale! Ora devo provare a ricordare questo.
Jon Ericson,

9
Solo per sottolineare che per fare il contrario (passando da .cpp-old a .cpp) faresti cp /home/foo/realllylongname.cpp{-old,}
Michael Ekoka,

Così ovvio in retrospettiva, eppure non credo che mi sarei ricordato di farlo da solo. Grazie!
Zecc,

150
cd -

È l'equivalente della riga di comando del pulsante Indietro (ti porta alla directory precedente in cui ti trovavi).


6
Preferisco usare pushde popdmantenere uno stack di directory, me stesso.
Alex M,

21
Ma "cd -" ha il vantaggio di funzionare anche se non ti ricordi di usare pushd.
Sergio Acosta,

10
Vale la pena ricordare che 'cd' ti porta nella tua home directory.
dr-jan,

È interessante che questo non si presenti in man cd, o cd --help(almeno il mio).
Halil Özgür,

135

Un altro preferito:

!!

Ripete l'ultimo comando. Più utile nella forma:

sudo !!

81
ha l'ulteriore vantaggio di farti sembrare davvero arrabbiato anche per questo. "Computer, fai questo." "Accesso negato". "FALLO!!"
Nickf,

Non è poco conosciuto! :-)
hoyhoy

10
Cose simili che puoi fare: mkdir testdir; cd !$.. Questo funziona cd [last word of previous line](nell'esempio cd testdir)
dbr

13
Make Me A Sandwich Sudo !!
Kibbee,

Se ti piace !!,! $ E! -1: ^ foo ^ bar, dovrai anche "associare Space: magic-space". stackoverflow.com/questions/603696/…
Yoo,

81

Il mio preferito è '^ string ^ string2' che accetta l'ultimo comando, sostituisce string con string2 e lo esegue

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz

Guida alla cronologia della riga di comando di Bash


Questo non è avido. Come posso renderlo goloso?
Altreus,

9
!!:gs/ehco/echo/
andre-r,

La seconda pagina di quella guida è essenziale
jmoz,

1
@ andre-r: !!:gs/ehco/echo/esegue una ricerca globale e sostituisce l'ultimo comando (confer !!in stackoverflow.com/questions/68372/… ). Ciò non equivale a quello ^ehco^echoche sostituisce solo un'istanza di "ehco": una risposta più accurata sarebbe !!:s/ehco/scho.
Iceland_jack,

64

rinominare

Esempio:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

Così utile


3
Wow, sono stato un idiota in tutti questi anni usando trucchi basename, mv e {} per farlo. / foreheadsmack.
Gregg Lind,

7
rinominare non è specifico bash / readline come gli altri post comunque.
pistole

1
zmv dalla distribuzione zsh è molto meglio nella maggior parte dei casi.
ZyX,

util-linux-ng ha anche un comando rename e non è come quello menzionato in questa risposta. Il comando qui descritto è in realtà mmv .
Cristian Ciupitu,

60

Sono un fan di !$, !^ed !*espandi, di ritorno, dalla riga di comando inviata più recente: l'ultimo elemento, il primo elemento non di comando e tutti gli elementi non di comando. Per dire (nota che la shell stampa prima il comando):

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

Questo è utile quando si, diciamo ls filea fileb, e si desidera modificare uno di loro: vi !$o di entrambi: vimdiff !*. Può anche essere generalizzato a "l' nargomento th" in questo modo:

$ echo foo bar baz
$ echo !:2
echo bar
bar

Infine, con i nomi dei percorsi, è possibile accedere a parti del percorso aggiungendo :he :ta uno degli espansi sopra indicati:

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

il 'echo !! 2' non ha funzionato per me e da un post successivo ho visto che penso che dovrebbe essere: 'echo!: 2'
user13060,

8
aggiungi "bind Space: magic-space" a .bashrc e qualsiasi! la combinazione verrà automaticamente espansa quando si colpisce lo spazio.
Yoo,

47

Quando eseguo i comandi, a volte vorrei eseguire un comando con gli argomenti precedenti. Per fare ciò, puoi usare questo collegamento:

$ mkdir /tmp/new
$ cd !!:*

Occasionalmente, al posto dell'utilizzo di find, interrompo un ciclo di una riga se devo eseguire un gruppo di comandi su un elenco di file.

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

Configurare le opzioni della cronologia della riga di comando nel mio .bash_login (o .bashrc) è davvero utile. Di seguito è riportato un gruppo di impostazioni che utilizzo sul mio Macbook Pro.

L'impostazione di quanto segue fa bash cancellare comandi duplicati nella tua cronologia:

export HISTCONTROL="erasedups:ignoreboth"

Ho anche aumentato la mia dimensione della storia piuttosto in alto. Perchè no? Non sembra rallentare nulla sui microprocessori di oggi.

export HISTFILESIZE=500000
export HISTSIZE=100000

Un'altra cosa che faccio è ignorare alcuni comandi della mia storia. Non è necessario ricordare il comando di uscita.

export HISTIGNORE="&:[ ]*:exit"

Sicuramente vuoi impostare histappend. Altrimenti, bash sovrascrive la tua cronologia quando esci.

shopt -s histappend

Un'altra opzione che utilizzo è cmdhist. Ciò consente di salvare i comandi multilinea nella cronologia come un solo comando.

shopt -s cmdhist

Infine, su Mac OS X (se non si utilizza la modalità vi), è necessario ripristinare <CTRL> -S dall'arresto dello scorrimento. Questo impedisce a bash di essere in grado di interpretarlo come ricerca in avanti.

stty stop ""

6
Trovo "Alt-." molto meglio di "!!: *" per ripetere l'ultima parola dell'ultimo comando.
Weidenrinde,

Aggiunte per histroy: 1. salva regolarmente la cronologia (con -a se hai più shell aperte contemporaneamente) export PROMPT_COMMAND = "history -a" 2. Alias ​​per leggere la cronologia da altre shell. alias - h = 'history -n; storia | grep '
Weidenrinde,

export HISTIGNORE = "[] *" non è necessario, poiché HISTCONTROL = ignoreboth dovrebbe fare lo stesso
Weidenrinde,

Un'altra cosa carina per la storia: export HISTTIMEFORMAT = "% Y-% m-% d% H:% M:% S:"
Weidenrinde,

Per salvare alcune sequenze di tasti di "cd !!: *", prova "cd! $". "! $" Verrà interpretato come l'ultimo argomento del tuo ultimo comando.
Tim Stewart,

43

Come elencare solo le sottodirectory di quella attuale?

ls -d */

È un trucco semplice, ma non sapresti quanto tempo ho bisogno per trovarlo!


2
Eccellente! In tutti questi anni il meglio che potevo inventare era alias lsd='ls -F | grep --color /', che avrebbe elencato la stessa cosa ma in modo più scadente. Tuttavia, dovrebbe elencare una directory per riga, per facilitare l'analisi. Ho modificato il tuo comando per fare lo stesso:ls -d1 */
Artem Russakovskii il

come funziona? "ls -d" elenca solo. (che è strano) ma "ls -d * /" funziona.
Yoo,

1
È un po 'complicato ... "ls -d" è simile a "ls -d ./" e "ls -d /" a "ls -d ./*/". L'opzione '-d' imposta 'ls' tu elenca solo le voci della directory, ma se non gli dai alcun parametro, usa la directory corrente come parametro, quindi ha * solo il "." elenco da elencare ...
edomaur,

1
Non posso credere di non averlo mai scoperto prima. Ottimo consiglio
Nick Dixon,

Nessuna parola, solo wow !!! :)
dimba

41

ESC.

Inserisce gli ultimi argomenti dall'ultimo comando bash. È utile più di quanto pensi.

cp file /to/some/long/path

CD ESC.


Questo funziona per me (bash). Si noti che si preme il tasto esc e quindi il tasto punto. Nessun trattino o altro.
Howler,

9
Anche alt-. è la stessa cosa
Mark Baker,

Sì, è solo Bash. Ma <esc> (o Alt- o Meta-) _ è associato alla stessa funzione e <esc> -_ funziona anche in modalità vi.
Nick Dixon,

@hendry nel mio zsh funziona davvero. Forse usi la modalità vi?
ZyX,

Usa il tag kbd per le hit da tastiera: <kbd> ESC </kbd> (ma non gioca molto bene insieme alla formattazione / rientro del codice).
utente sconosciuto

36

Certo, puoi " diff file1.txt file2.txt", ma Bash supporta la sostituzione di processo , che ti permette di diffemettere comandi.

Ad esempio, diciamo che voglio assicurarmi che il mio script mi ​​dia l'output che mi aspetto. Posso semplicemente avvolgere il mio script in <() e dargli da mangiare diffper ottenere un test di unità veloce e sporco:

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

Come altro esempio, diciamo che voglio verificare se due server hanno lo stesso elenco di RPM installati. Invece di scrivere su ciascun server, scrivere ogni elenco di RPM in file separati e fare uno diffsu quei file, posso semplicemente farlo diffdalla mia workstation:

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

Ci sono altri esempi nella Guida avanzata di script Bash su http://tldp.org/LDP/abs/html/process-sub.html .


35

Il mio comando preferito è "ls -thor"

Richiama il potere degli dei per elencare i file modificati più di recente in un formato facilmente leggibile.


6
Mi ricorda un altro, totalmente inutile ma anche il comando divertente: ls -bart -simpson -ruls. S, ICNR
filiprem,

'ls -tor' è anche utile poiché puoi trovare rapidamente file di grandi dimensioni. Inoltre, l'originale ortografia svedese del nome del dio del tuono è in realtà "Tor".
dala,

In danese puoi usare ls -lortla parola danese per "merda". Omettere qualsiasi gruppo e non ottenere l'ira di Valhal :)
Jesper Rønn-Jensen,

1
si potrebbe anche dire come "ls -lotr" che apparentemente ha qualcosa a che fare con Tolkien e Il Signore degli Anelli :)
AD

28

Più di una novità, ma è intelligente ...

Primi 10 comandi utilizzati:

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

Uscita campione:

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

1
Ecco una versione più breve e più veloce:history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
In pausa fino a ulteriore avviso.

25

^ R ricerca inversa. Premi ^ R, digita un frammento di un comando precedente che desideri abbinare e premi ^ R fino a trovare quello che desideri. Quindi non devo ricordare i comandi usati di recente che sono ancora nella mia storia. Non esclusivamente bash, ma anche: ^ E per la fine della riga, ^ A per l'inizio della riga, ^ U e ^ K da eliminare rispettivamente prima e dopo il cursore.


2
Non riesco mai a ricordare ^ U per qualche motivo. Non esiste anche una parola per eliminare la scorciatoia?
hoyhoy,

1
^ W cancella la parola prima del cursore. (Sentiti libero di modificare la tua risposta con questo.)
Jon Ericson,

2
^ R essendo così utile da essere menzionato nella domanda :)
Mark Baker,

20

Ho spesso alias per vi, ls, ecc. Ma a volte vuoi sfuggire all'alias. Basta aggiungere una barra rovesciata al comando di fronte:

Per esempio:

$ alias vi=vim
$ # To escape the alias for vi:
$ \vi # This doesn't open VIM

Fantastico, vero?


Puoi anche eseguire command—vedi SHELL BUILTIN COMMANDSnel manuale di Bash.
Iceland_jack il

17

Ecco un paio di modifiche alla configurazione:

~/.inputrc:

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

Funziona allo stesso modo ^Rma usando invece i tasti freccia. Questo significa che posso digitare (ad es.) cd /media/Quindi premere la freccia su per andare all'ultima cosa cdall'interno della /media/cartella.

(Uso Gnome Terminal, potrebbe essere necessario modificare i codici di escape per altri emulatori di terminali.)

Anche il completamento di Bash è incredibilmente utile, ma è un'aggiunta molto più sottile. In ~/.bashrc:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

Ciò consentirà il completamento della scheda per programma (ad es. Il tentativo di completamento della scheda all'avvio della riga di comando evincemostrerà solo i file che possono essere aperti e anche le opzioni della riga di comando che completano la scheda).

Funziona bene con questo anche in ~/.inputrc:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

+1 bash_completion è fantastico
prestomation

Su un Mac, la ricerca della cronologia con i tasti freccia può essere abilitata con: bind '"\ e [A"': history-search-backward bind '"\ e [B"': history-search-forward
Asmus

17

Uso molto quanto segue:

Il :pmodificatore per stampare un risultato della cronologia. Per esempio

!!:p

Stampa l'ultimo comando in modo da poter verificare che sia corretto prima di eseguirlo di nuovo. Basta inserire !!per eseguirlo.

Allo stesso modo:

!?foo?:p

Ricerca nella cronologia il comando più recente che conteneva la stringa "pippo" e la stampa.

Se non è necessario stampare,

!?foo

esegue la ricerca e la esegue immediatamente.


2
Invece di usare: p, puoi anche usare magic-space: stackoverflow.com/questions/603696/…
Yoo,

espandere i controlli storici senza eseguire confiure magick-space in bashrcbind Space:magic-space # !pin<space>
SergioAraujo,

16

Ho un'arma segreta: shell-fu.

Ci sono migliaia di suggerimenti intelligenti, trucchi interessanti e ricette efficaci che il più delle volte si inseriscono in una sola riga.

Uno che adoro (ma imbroglio un po 'dal momento che uso il fatto che Python sia installato sulla maggior parte dei sistemi Unix ora):

alias webshare='python -m SimpleHTTPServer'

Ora ogni volta che si digita "webshare", la directory corrente sarà disponibile attraverso la porta 8000. Davvero bello quando si desidera condividere file con gli amici su una rete locale senza chiave USB o dir remoto. Anche lo streaming di video e musica funzionerà.

E ovviamente la classica bomba a forcella completamente inutile ma comunque molto divertente:

$ :(){ :|:& };:

Non provarlo in un server di produzione ...


Immagino che non dovrei condividere in web /
Yoo,

Immagino che tu possa semplificare il comando python -m SimpleHTTPServer(a meno che non mi manchi qualcosa di speciale il comando originale
Jesper Rønn-Jensen,

Meh. Su un server di produzione quella bomba a forcella verrà semplicemente schiacciata dal sistema operativo; ci sono limiti al numero di processi che qualsiasi utente può creare.
Donal Fellows,

3
@Donal: dovresti provarlo e segnalare i tuoi risultati.
Michael Foukarakis,

12

È possibile utilizzare il comando watch insieme a un altro comando per cercare le modifiche. Un esempio di ciò è stato quando stavo testando il mio router e volevo ottenere numeri aggiornati su cose come il rapporto segnale-rumore, ecc.

watch --interval=10 lynx -dump http://dslrouter/stats.html

Il comando watch è davvero fantastico. Ho letto per la prima volta nel libro Linux Server Hacks circa cinque anni fa. Chi sapeva che esistesse?
hoyhoy,

11
Cosa ha a che fare 'guardare' con bash?
Artem Russakovskii,

11
type -a PROG

al fine di trovare tutti i posti in cui PROG è disponibile, di solito da qualche parte in ~ / bin piuttosto che quello in / usr / bin / PROG che ci si poteva aspettare.


1
Ti dirà anche se è una funzione o un alias. Se si trova in più punti del tuo PATH, mostrerà ciascuno di essi.
In pausa fino a nuovo avviso.

11

Mi piace costruire comandi con eco e inoltrarli alla shell:

$ find dir -name \*~ | xargs echo rm
...
$ find dir -name \*~ | xargs echo rm | ksh -s

Perché? Perché mi permette di vedere cosa sarà fatto prima di farlo. In questo modo se ho un errore orribile (come rimuovere la mia directory home), posso prenderlo prima che accada. Ovviamente, questo è molto importante per azioni distruttive o irrevocabili.


1
Potresti voler usare find -print0 e xargs -0 per evitare problemi con file e cartelle con spazi bianchi.
neu242,

Oppure evita di creare e lavorare con file e cartelle con spazi bianchi nei loro nomi. ;-) Ovviamente se stai lavorando con nomi generati dagli utenti, il tuo suggerimento è di vitale importanza.
Jon Ericson,

4
Perché dovresti aggiungere "| ksh -s" quando potresti semplicemente rimuovere "echo"?
Yoo,

Non c'è bisogno di pipe con GNU per trovare:$ find dir -name \\*~ -exec rm {} +
bobbogo

10

Quando scarico un file di grandi dimensioni, lo faccio spesso:

while ls -la <filename>; do sleep 5; done

E poi basta ctrl + c quando ho finito (o se lsrestituisce un valore diverso da zero). È simile al watchprogramma ma utilizza invece la shell, quindi funziona su piattaforme senza watch.

Un altro strumento utile è netcat, o nc. Se fate:

nc -l -p 9100 > printjob.prn

Quindi è possibile configurare una stampante su un altro computer ma utilizzare invece l'indirizzo IP del computer che esegue netcat. Quando il lavoro di stampa viene inviato, viene ricevuto dal computer che esegue netcat e scaricato printjob.prn.


Perché questo e non, per esempio wget?
porges,

Prova watch ls -la <filename>(usa -n5 se non ti piace il valore predefinito di 2 secondi).
Ted Percival,

1
@Ted, tuttavia watchnon è disponibile su tutte le piattaforme, come Solaris, Mac OS X, ecc. @Porges, non sono sicuro di cosa intendi. Wget può anche ascoltare su una porta?
dreamlax,


10

Un modo preferito di navigare quando sto usando più directory in luoghi molto separati in una gerarchia di alberi è usare acf_func.sh (elencato di seguito). Una volta definito, puoi farlo

cd -

per visualizzare un elenco di directory recenti, con un menu numerico

cd -2

per passare alla seconda directory più recente.

Molto facile da usare, molto utile.

Ecco il codice:

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

10

Espandi le linee complicate prima di colpire il temuto invio

  • Alt+ Ctrl+ e- shell-expand-line (potrebbe essere necessario utilizzare Esc, Ctrl+ esulla tastiera)
  • Ctrl+ _- annulla
  • Ctrl+ x, *- glob-expand-word

$ echo !$ !-2^ * Alt+ Ctrl+ e
$ echo aword someotherword * Ctrl+ _
$ echo !$ !-2^ * Ctrl+ x, *
$echo !$ !-2^ LOG Makefile bar.c foo.h

& C.


+1, ho sempre paura di premere Enter:)
João Portela il

Non conoscevo nessuno di questi. Annulla è un assassino. Buono per qualsiasi modifica della riga di comando.
Philippe A.

9

Sono sempre stato parziale a:

ctrl-E # move cursor to end of line
ctrl-A # move cursor to beginning of line

Uso anche io shopt -s cdable_vars, quindi puoi creare variabili bash in directory comuni. Quindi, per l'albero dei sorgenti della mia azienda, creo un mucchio di variabili come:

export Dcentmain="/var/localdata/p4ws/centaur/main/apps/core"

quindi posso passare a quella directory da cd Dcentmain.


Home e End fanno le stesse cose di crtl-A e ctrl-E.
davidfg4,

Questo aiuta su laptop Mac che non dispongono di chiavi home e end.
James,

Sfortunatamente ctrl-A è anche la chiave di escape per screenimpostazione predefinita. Lo rimpiazzo in ctrl-X nel mio .screenrc, ma poi non sono un utente emacs.
sistema PAUSA

In qualche modo correlato all'opzione cdable_vars, c'è anche la variabile d'ambiente CDPATH. Ma funziona diversamente, perché hai impostato la directory principale, proprio come in PATH. Con cdable_vars hai un maggiore controllo.
Zecc,

1
Altro per l'elenco di collegamenti: CTRL + K per eliminare tutto dal cursore alla fine della riga, CTRL + U per eliminare tutto prima del cursore, ALT + F / ALT + B per spostare una parola in avanti / indietro (o CTRL + freccia sinistra / CTRL + freccia destra). +1 per cdable_vars!
Philippe A.

8

pbcopy

Questo copia negli appunti del sistema Mac. Puoi inoltrare i comandi ad esso ... prova:

pwd | pbcopy


NB! Questo è un comando specifico per Mac.
dala,

Questi non sono: alias pbcopy='xsel --clipboard --input' e alias pbpaste='xsel --clipboard --output'
wawawawa,

7
$ touch {1,2}.txt
$ ls [12].txt
1.txt  2.txt
$ rm !:1
rm [12].txt
$ history | tail -10
...
10007  touch {1,2}.txt
...
$ !10007
touch {1,2}.txt
$ for f in *.txt; do mv $f ${f/txt/doc}; done

Utilizzare history 10invece di history | tail -10(che dovrebbe essere comunque tail -n 10considerato che la sintassi è obsoleta).
In pausa fino a nuovo avviso.

7

L'uso di 'set -o vi' dalla riga di comando, o meglio, in .bashrc, ti mette in modalità di modifica vi sulla riga di comando. Si avvia in modalità 'insert' in modo da poter digitare e backspace come di consueto, ma se si commette un errore 'grande' è possibile premere il tasto esc e quindi usare 'b' e 'f' per spostarsi come si fa in vi. cw per cambiare una parola. Particolarmente utile dopo aver richiamato un comando di cronologia che si desidera modificare.


7

Simile a molti sopra, il mio preferito preferito è il tasto [alt]. (Alt e "." Insieme) equivale a $! (Inserisce l'ultimo argomento dal comando precedente) tranne per il fatto che è immediato e per me più facile da digitare. (Non può essere usato negli script)

per esempio:

mkdir -p /tmp/test/blah/oops/something
cd [alt].

Prova anche a combinarlo con Alt- [0-9] (premi la prima combinazione, quindi rilascia, quindi la seconda). ad es. se l'ultimo comando era 'mv foo bar', quindi "Alt-0 Alt-." dà "mv", "Alt-1 Alt-." dà "pippo", "Alt-2 Alt-." e di base Alt-. entrambi danno "bar", ecc.
Sam Stokes,

1
Prova anche a premere Alt-. più di una volta (o premi Alt, tienilo premuto, premi punto più volte, quindi rilascia Alt) È simile a premere Ctrl-R più di una volta.
Yoo,

7

Stringi più comandi insieme usando il comando && :

./run.sh && tail -f log.txt

o

kill -9 1111 && ./start.sh

1
se uno fallisce, l'altro comando non verrà eseguito (fallisce velocemente, come in programmazione)
Frederic Morin,

1
Il contrario è usare il logico o '||' in cui il lato destro verrà eseguito solo se il lato sinistro è falso. Esempio: <code> command_1 || command_2 </code>
dala,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.