\e-\e.
(ou pressionando -
e .
, enquanto alt / opção segurando) insere o segundo última palavra.
Da mesma forma, \e-2\e.
insere o terceiro última palavra, e \e2\e.
insere a terceira palavra.
Dentro do shell, digitar ALT+.
ou usando !$
chama novamente o último argumento passado do comando anterior. Eu uso isso o tempo todo, mas como você faz isso quando desanexou o comando anterior?
$ do-something foo a_long_file_name &
Como obtenho a_long_file_name
no prompt e não noe comercial?
\e-\e.
(ou pressionando -
e .
, enquanto alt / opção segurando) insere o segundo última palavra.
Da mesma forma, \e-2\e.
insere o terceiro última palavra, e \e2\e.
insere a terceira palavra.
Usando a expansão do histórico, você pode acessar as palavras do comando anterior com !:n
, em que n inicia em 0 com o nome do comando. !^
é equivalente a !:1
. Nesse caso, você quer !:2
$ echo foo bar &
[1] 10750
foo bar
$ echo !:2
echo bar
bar
[1]+ Done echo foo bar
Você faz $_
.
echo 'hey there' &
echo "$_"
hey there
hey there
As respostas de glenn e Lauri estão corretas, mas elas exigem muita digitação do IMO.
Finalmente, surgiu a seguinte solução: C-j
looping através dos argumentos do comando anterior (excluindo o e comercial), do último para o primeiro. Isso é muito prático! Aqui está como fazer isso:
Escreva o seguinte script:
#!/bin/bash
cj_hist=$(builtin history | tail -n1)
cj_num=$(cut -f1 -d\ <<< $cj_hist)
if [[ $cj_old_num -eq $cj_num ]]
then
cj_killw='\x17'
else
cj_args=$(cut -f3- -d\ <<< $cj_hist)
cj_args=${cj_args%&}
cj_args=($cj_args)
cj_cnt=0
cj_killw=''
fi
[[ $cj_cnt -le 0 ]] && cj_cnt=${#cj_args[*]}
let cj_cnt--
if [[ $cj_cnt -eq -1 ]]
then
bind '"\ez":""'
# bind -m vi-insert '"\C-o":""'
else
bind '"\ez":"'$cj_killw${cj_args[$cj_cnt]}'"'
# bind -m vi-insert '"\C-o":"'$cj_killw${cj_args[$cj_cnt]}'"'
fi
cj_old_num=$cj_num
Coloque isso no seu ~ / .bashrc:
bind -x '"\ew": source ~/foo.sh' # ~/foo.sh is the script's path
bind '"\C-j":"\ew\ez"'
# bind -x '"\C-h": source ~/foo.sh' # vi-users: no mess
# bind -m vi-insert '"\C-j":"\C-h\C-o"' # with escapes
NB: Uma vez que nós fornecemos o script, temos que usar nomes de variáveis que não são comumente usados, daí o prefixo cj_
. Claro, você pode usar outro prefixo.