Como acessar o histórico em tempo real no Unix?

11

Por exemplo, se eu fizer um

mkdir thisismyfolder912

Eu lembro que há uma maneira mais fácil de mudar para thisismyfolder912 do que ter que fazer um

cd thisismyfolder912

O que é isso e como funciona? Além disso, quais são as outras maneiras de usar isso?

    
por Lazer 25.08.2010 / 16:48

8 respostas

10

Você está falando sobre expansão clássica de histórico ou processamento Readline? cd !$ na próxima linha de entrada substituirá no último argumento da linha anterior, ou M -. ou M -_ irá utilizá-lo usando Readline.

    
por 25.08.2010 / 17:04
9

Se a sua pergunta for sobre como acessar o histórico de comandos, tente este comando bem-nomeado

history 

Você também pode tentar Ctrl + r , e começar a digitar um comando que você está tentando lembrar que você digitou recentemente.

(reverse-i-search)'cd ': cd mydir/data/

Pressione ESC para selecionar o comando ou sair. Isso funciona para mim no SuSE, pelo menos; não tenho certeza sobre outras distros.

    
por 25.08.2010 / 18:49
7

É tão simples quanto Alt + .

$ mkdir lasdfjalsdkjf
$ cd 

Alt + .

$ cd lasdfjalsdkjf
    
por 25.08.2010 / 17:46
2

isso sempre funcionou para mim:

mkdir thisismyfolder
cd $_
    
por 26.08.2010 / 03:00
1

Pegando uma dica de outro tópico, se você colocar:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

no seu .bashrc, você pode começar a digitar algo do seu histórico e, em seguida, pressionar a seta para cima e, em vez de percorrer seu histórico item por item, ele pulará para as entradas anteriores que começam com o que você já digitei.

Eu acho que isso não ajuda muito com o exemplo específico dado na pergunta, mas é uma coisa que me ajuda a acessar o histórico em tempo real.

    
por 26.08.2010 / 04:33
1

Se você usar bash eu sugiro pushd e popd . Você pode criar uma pilha de diretórios e navegar rapidamente. Veja este exemplo:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$
    
por 25.08.2010 / 19:51
1

Em uma nota relacionada, recomendo usar o histverify no bash. Coloque isso no seu ~ / .bashrc:

shopt -s histverify

Isso fará com que o bash imprima o comando depois de expandir! $ ou outras funções do histórico, e dar a você uma chance de olhar para ele antes de pressionar Enter novamente para executá-lo. Para mim, o teste de sanidade vale a pena a pressão extra ocasional. Quer ter certeza de que estou executando o comando cd foo , não o rm -rf foo one ...

Eu freqüentemente uso a abordagem Ctrl-R , bem como Alt -. (que é uma boa opção para o cenário que você descreve). Eu vou usar! $ Ocasionalmente.

Estas são técnicas de uso geral muito úteis.

Mas para abordar sua pergunta específica:

Criar um diretório e fazer o cd diretamente nele é uma combinação tão comum que é útil ter uma função para envolvê-lo.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Uso: mcd thisismyfolder

    
por 05.10.2010 / 17:11
1

Se seu shell usa readline (que é o caso de bash ) você pode fazer algo como pressionar ATL + . juntos?

Na documentação do GNU Readline :

yank-last-arg (M-. or M-_)

Insert last argument to the previous command (the last word of the previous history entry). With an argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last argument of each line in turn.

    
por 26.08.2010 / 10:39