Obtendo linha específica da saída do terminal

1

"Hmm, eu preciso editar file-i-must-edit-2 , mas não consigo lembrar onde está."

locate file-i-must-edit
/home/user/file-i-must-edit-1
/home/user/file-i-must-edit-2
/home/user/file-i-must-edit-3

"Ótimo! Gostaria que houvesse uma maneira de evitar digitar /home/user/file-i-must-edit-2 novamente ..."

Existe uma maneira de evitar a digitação %código% digitando algo como nano /home/user/file-i-must-edit-2 ?

    
por Vittorio Romeo 13.07.2013 / 16:26

2 respostas

2

Se você obtiver apenas uma linha de saída, será fácil:

locate file-i-must-edit
nano $(!!)

Existe uma técnica que você pode usar quando há mais linhas, mas envolve executar o comando original de uma maneira diferente (o que você pode não querer fazer o tempo todo):

$ touch a b c
$ OUT=( $(find .) )
$ echo ${OUT[2]}
./b

Uma coisa que você poderia fazer para evitar a digitação é repetir o comando anterior (usando readline, é claro), reduzi-lo para obter apenas uma linha, e então nano $(!!) ou pipe para xargs .

    
por 13.07.2013 / 18:45
0

Aqui está uma maneira programática de fazer isso (vs. usando o mouse para a seleção do X-Windows)

# function to nano edit a line (by number) from $list

nano-n() { nano "$(sed -n "$1{p;q}" <<<"$list")"; }

# As you produce your list of files, save them to a variable ($list), 
#   as well as printng them to the terminal.
# Do this by "duplicating" descriptor 1 (stdout) to 
#  another available descriptor (eg. 9)

exec 9>&1; list="$(locate file-i-must-edit |tee /dev/fd/9)"

# now you can just type the following at the propmt (assuming that $list is available at the prompt)  

nano-n 2
    
por 13.07.2013 / 18:27