Todos sabemos como usar <ctrl>-R
para reverter a pesquisa no histórico, mas você sabia que pode usar <ctrl>-S
para encaminhar a pesquisa, se você definir stty stop ""
? Além disso, você já tentou executar o bind -p para ver todos os atalhos de teclado listados? Existem mais de 455 no Mac OS X por padrão.
Qual é o seu truque obscuro mais favorito, atalho de teclado ou configuração do shopt usando bash?
bash
command-line
Robert Harvey
fonte
fonte
Respostas:
Renomeando / movendo arquivos com sufixos rapidamente:
cp /home/foo/realllylongname.cpp{,-old}
Isso se expande para:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
fonte
É o equivalente na linha de comando do botão Voltar (leva você ao diretório anterior em que você estava).
fonte
pushd
epopd
manter uma pilha de diretórios.man cd
oucd --help
pelo menos no meu).Outro favorito:
Repete o seu último comando. Mais útil no formato:
fonte
mkdir testdir; cd !$
.. Isto funcionacd [last word of previous line]
(no exemplo,cd testdir
)Meu favorito é '^ string ^ string2', que pega o último comando, substitui a string pela string2 e a executa
Guia de histórico da linha de comando do Bash
fonte
!!:gs/ehco/echo/
!!:gs/ehco/echo/
realiza uma pesquisa global e substitui o último comando (confira!!
em stackoverflow.com/questions/68372/… ). Isso não é equivalente ao^ehco^echo
que apenas substitui uma instância de "ehco" - seria uma resposta mais precisa!!:s/ehco/scho
.renomear
Exemplo:
Tão útil
fonte
Eu sou um fã dos
!$
,!^
e!*
expandos, retornando, a partir da linha mais recente de comando apresentados: o último item, o item primeiro não-comando, e todos os itens não-comando. A saber (observe que o shell imprime o comando primeiro):Isto vem a calhar quando você, por exemplo
ls filea fileb
, e quer editar um deles:vi !$
ou ambos:vimdiff !*
. Também pode ser generalizado para o "n
argumento th", assim:Por fim, com nomes de caminho, você pode acessar partes do caminho anexando
:h
e:t
a qualquer uma das expansões acima:fonte
Ao executar comandos, às vezes vou querer executar um comando com os argumentos anteriores. Para fazer isso, você pode usar este atalho:
Ocasionalmente, em vez de usar o find, separarei um loop de uma linha se precisar executar vários comandos em uma lista de arquivos.
Configurar as opções do histórico da linha de comando no meu .bash_login (ou .bashrc) é realmente útil. A seguir, é apresentado um quadro de configurações que eu uso no meu Macbook Pro.
Definir o seguinte faz com que o bash apague comandos duplicados no seu histórico:
Também elevo o tamanho da minha história bem alto também. Por que não? Parece não retardar nada nos microprocessadores atuais.
Outra coisa que faço é ignorar alguns comandos da minha história. Não há necessidade de lembrar o comando exit.
Você definitivamente deseja definir o histappend. Caso contrário, o bash substituirá seu histórico quando você sair.
Outra opção que eu uso é o cmdhist. Isso permite salvar comandos de várias linhas no histórico como um comando.
Por fim, no Mac OS X (se você não estiver usando o modo vi), convém redefinir <CTRL> -S para parar a rolagem. Isso impede que o bash possa interpretá-lo como pesquisa direta.
fonte
Como listar apenas subdiretórios no atual?
É um truque simples, mas você não saberia quanto tempo eu precisava para encontrar esse!
fonte
alias lsd='ls -F | grep --color /'
, que listaria a mesma coisa, mas de uma maneira mais manca. No entanto, listaria um dir por linha, para facilitar a análise. I tiver modificado o seu comando para fazer o mesmo:ls -d1 */
ESC.
Insere os últimos argumentos do seu último comando bash. É mais útil do que você pensa.
CD ESC.
fonte
Claro, você pode "
diff file1.txt file2.txt
", mas o Bash suporta a substituição de processos , o que permitediff
a saída de comandos.Por exemplo, digamos que eu queira ter certeza de que meu script me dê a saída que espero. Posso apenas envolver meu script em <() e alimentá-lo
diff
para obter um teste de unidade rápido e sujo:Como outro exemplo, digamos que desejo verificar se dois servidores têm a mesma lista de RPMs instalados. Em vez de fazer o sshing para cada servidor, escrever cada lista de RPMs para separar arquivos e executar um
diff
desses arquivos, eu posso fazer isso nadiff
minha estação de trabalho:Há mais exemplos no Advanced Bash-Scripting Guide em http://tldp.org/LDP/abs/html/process-sub.html .
fonte
Meu comando favorito é "ls -thor"
Convoca o poder dos deuses para listar os arquivos modificados mais recentemente em um formato convenientemente legível.
fonte
ls -bart -simpson -ruls
. S, ICNRls -lort
a palavra dinamarquesa para "merda". Omitindo nenhum grupo e não recebendo a ira de Valhal :)Mais uma novidade, mas é inteligente ...
Os 10 principais comandos usados:
Saída de amostra:
fonte
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R pesquisa inversa. Pressione ^ R, digite um fragmento do comando anterior que você deseja corresponder e pressione ^ R até encontrar o que deseja. Não preciso me lembrar de comandos usados recentemente que ainda estão no meu histórico. Não exclusivamente bash, mas também: ^ E para final de linha, ^ A para início de linha, ^ U e ^ K para excluir antes e depois do cursor, respectivamente.
fonte
Muitas vezes tenho aliases para vi, ls, etc., mas às vezes você deseja escapar do alias. Basta adicionar uma barra invertida ao comando à frente:
Por exemplo:
Legal, não é?
fonte
command
- consulteSHELL BUILTIN COMMANDS
o manual do Bash.Aqui estão alguns ajustes na configuração:
~/.inputrc
:Isso funciona da mesma maneira que
^R
com as teclas de seta. Isso significa que eu posso digitar (por exemplo)cd /media/
e pressionar a seta para cima para ir para a última coisa que eucd
faria dentro do/media/
pasta.(Eu uso o Gnome Terminal, pode ser necessário alterar os códigos de escape para outros emuladores de terminal.)
A conclusão do Bash também é incrivelmente útil, mas é uma adição muito mais sutil. Em
~/.bashrc
:Isso permitirá o preenchimento de tabulação por programa (por exemplo, tentar concluir a tabulação quando a linha de comando iniciar com
evince
mostrará apenas arquivos que podem ser abertos, e também opções de linha de comando completas).Funciona bem com isso também em
~/.inputrc
:fonte
Eu uso muito o seguinte:
O
:p
modificador para imprimir um resultado do histórico. Por exemploIrá imprimir o último comando para que você possa verificar se está correto antes de executá-lo novamente. Basta entrar
!!
para executá-lo.Na mesma linha:
Pesquisará em seu histórico o comando mais recente que continha a string 'foo' e a imprimirá.
Se você não precisar imprimir,
faz a pesquisa e a executa imediatamente.
fonte
bind Space:magic-space # !pin<space>
Eu tenho uma arma secreta: shell-fu.
Existem milhares de dicas inteligentes, truques legais e receitas eficientes que na maioria das vezes cabem em uma única linha.
Um que eu amo (mas trapaceio um pouco desde que uso o fato de o Python estar instalado na maioria dos sistemas Unix agora):
Agora, toda vez que você digitar "compartilhamento na web", o diretório atual estará disponível através da porta 8000. Muito bom quando você deseja compartilhar arquivos com amigos em uma rede local sem chave USB ou diretório remoto. O streaming de vídeo e música também funcionará.
E, claro, a clássica bomba de garfo que é completamente inútil, mas ainda muito divertida:
Não tente isso em um servidor de produção ...
fonte
python -m SimpleHTTPServer
(a menos que eu esteja sentindo falta de algo sofisticado que o comando original fazVocê pode usar o comando watch em conjunto com outro comando para procurar alterações. Um exemplo disso foi quando eu estava testando meu roteador e queria obter números atualizados sobre coisas como a relação sinal / ruído, etc.
fonte
para encontrar todos os locais onde o PROG está disponível, geralmente em algum lugar em ~ / bin, em vez daquele em / usr / bin / PROG que poderia ser esperado.
fonte
PATH
, mostrará cada um deles.Eu gosto de construir comandos com eco e canalizá-los para o shell:
Por quê? Porque me permite ver o que será feito antes de fazê-lo. Dessa forma, se eu tiver um erro horrível (como remover meu diretório inicial), posso detectá-lo antes que aconteça. Obviamente, isso é mais importante para ações destrutivas ou irrevogáveis.
fonte
$ find dir -name \\*~ -exec rm {} +
Ao baixar um arquivo grande, geralmente faço:
E então, basta pressionar Ctrl + c quando terminar (ou se
ls
retornar diferente de zero). É semelhante aowatch
programa, mas usa o shell, portanto, funciona em plataformas semwatch
.Outra ferramenta útil é o netcat, ou
nc
. Se você fizer:Em seguida, você pode configurar uma impressora em outro computador, mas usar o endereço IP do computador que está executando o netcat. Quando o trabalho de impressão é enviado, é recebido pelo computador que está executando o netcat e despejado
printjob.prn
.fonte
wget
?watch ls -la <filename>
(use -n5 se você não gostar do padrão de 2 segundos).watch
não está disponível em todas as plataformas, como Solaris, Mac OS X, etc. @Porges, não sei o que você quer dizer. O wget também pode ouvir em uma porta?pushd
epopd
quase sempre são úteisfonte
Uma maneira preferida de navegar quando estou usando vários diretórios em locais amplamente separados em uma hierarquia de árvore é usar o acf_func.sh (listado abaixo). Uma vez definido, você pode fazer
cd -
para ver uma lista de diretórios recentes, com um menu numérico
cd -2
para ir para o segundo diretório mais recente.
Muito fácil de usar, muito útil.
Aqui está o código:
fonte
Expanda linhas complicadas antes de pressionar o temido enter
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
& c.
fonte
Enter
:)Eu sempre fui parcial em:
Eu também uso
shopt -s cdable_vars
, então você pode criar variáveis bash para diretórios comuns. Portanto, para a árvore de fontes da minha empresa, crio várias variáveis como:então eu posso mudar para esse diretório por
cd Dcentmain
.fonte
screen
por padrão. Eu remapeá-lo para ctrl-X no meu.screenrc
, mas não sou um usuário do emacs.pbcopy
Isso copia para a área de transferência do sistema Mac. Você pode canalizar comandos para ele ... tente:
pwd | pbcopy
fonte
alias pbcopy='xsel --clipboard --input'
ealias pbpaste='xsel --clipboard --output'
fonte
history 10
vez dehistory | tail -10
(que deve sertail -n 10
o caminho desde que essa sintaxe foi descontinuada).O uso de 'set -o vi' na linha de comando, ou melhor, em .bashrc, coloca você no modo de edição vi na linha de comando. Você inicia no modo 'inserir' para digitar e retroceder normalmente, mas se cometer um erro 'grande', poderá pressionar a tecla esc e, em seguida, usar 'b' e 'f' para se movimentar como no vi. cw para mudar uma palavra. Particularmente útil depois que você abre um comando de histórico que deseja alterar.
fonte
Semelhante a muitos acima, meu favorito atual é o pressionamento de tecla [alt]. (Alt e "." Juntas) são o mesmo que $! (Insere o último argumento do comando anterior), exceto que é imediato e para mim é mais fácil digitar. (Apenas não pode ser usado em scripts)
por exemplo:
fonte
Coloque vários comandos juntos usando o comando && :
ou
fonte