Respostas:
Você está falando sobre expansão clássica da história ou processamento da Readline? cd !$
na próxima linha de entrada o substituirá no último argumento da linha anterior M-.ou M-_o puxará usando o Readline.
cd !$
. "A expansão da história do clássico ou processamento Readline" Eu não entendo exatamente o que você quer dizer ...
!$
é uma expansão da história ; o shell o processa conforme analisa seu comando. M-. é um pressionamento de tecla readline; readline é a biblioteca que lida com cada tecla que você pressiona e vê que você pressionou M-. e digita o último argumento do último comando para você automaticamente
Se sua pergunta é sobre como acessar o histórico de comandos, tente este comando bem nomeado
history
Você também pode tentar Ctrl+ re começar a digitar um comando que está tentando lembrar que digitou recentemente.
(reverse-i-search)`cd ': cd mydir/data/
Pressione ESCpara selecionar o comando ou sair. Isso funciona para mim no SuSE, pelo menos; não tenho certeza sobre outras distros.
history | grep ...
!
vi
para gerenciar sua linha de comando. Parece super legal. usando vi a comandos shell editar
É tão simples quanto Alt+.
$ mkdir lasdfjalsdkjf
$ cd
Alt + .
$ cd lasdfjalsdkjf
<kbd></kbd>
tags para envolver a chave.
<kbd>
isto sempre funcionou para mim:
mkdir thisismyfolder
cd $_
$!
expande-se para a última palavra digitada, $_
expande-se para a última palavra após a expansão - para que você possa echo /tmp/tmpfile*
ver um monte de arquivos que deseja remover, mas rm $_
só removerá um deles.
Pegando uma dica de outro segmento, 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, pressionar a seta para cima e, em vez de passar pelo item do histórico por item, ele passará para as entradas anteriores que começam com o que você já digitado.
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.
Se você usar o bash, 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:~$
$
é útil na demonstração pushd
, etc.)
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 lhe dê uma chance de vê-lo antes de pressionar Enter novamente para executá-lo. Para mim, a verificação de sanidade vale o pressionamento de tecla extra ocasional. Deseja ter certeza de que estou executando o cd foo
comando, não o rm -rf foo
...
Eu frequentemente uso a Ctrl-Rabordagem, bem como Alt-.(o que é um bom ajuste para o cenário que você descreve). Vou usar! $ De vez em quando.
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 agrupá-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
Se seu shell usa readline (qual é o caso bash
), você pode fazer algo como pressionar ATL+ .juntos?
Na documentação do GNU Readline :
yank-last-arg (M-. ou M-_)
Insira o último argumento no comando anterior (a última palavra da entrada do histórico anterior). Com um argumento, comporte-se exatamente como yank-nth-arg. Chamadas sucessivas para yank-last-arg retornam pela lista de histórico, inserindo o último argumento de cada linha.
cd this<TAB>