Como posso executar uma linha específica como um comando em um arquivo de texto?

8

Às vezes, preciso executar um único comando que esteja em um script de shell.

Eu já sei que sed -n 'line_num p' pode imprimir essa linha. Mas como exec eu que imprimi linha específica como um comando?

    
por Zen 12.01.2015 / 04:02

5 respostas

7

Tente esse cara =):

sed -n 'line_num p' | bash

ou

"$(sed -n 'line_num p')"
    
por 12.01.2015 / 04:11
2

Se você está fazendo isso de forma interativa, pode escrever a linha no histórico bash:

history -s "$(sed -n 'line_num p')"

Em seguida, pressione Enter para inserir a linha no buffer readline e executá-la; que lhe dá a chance de olhar para a linha antes que seja tarde demais.

    
por 12.01.2015 / 23:24
1

Você pode fazer ...

{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"

Isso obterá apenas a linha $NUM do seu script na variável do shell $line e, em seguida, avaliará como um comando no shell atual.

Outra maneira de fazer isso pode parecer:

 </path/to/script sed "${NUM}q;d" >/tmp/"$$"
 . /tmp/"$$" ; rm /tmp/"$$"
    
por 12.01.2015 / 04:45
0

Você está editando seu script com o vim (vi no Linux)? No vi adicionar um mapeamento:

:nmap <F4> Y:!<C-R>"<C-H><CR>

e depois quando você está na linha interessante no vi pressione F4

    
por 12.01.2015 / 14:07
-2

No bash você pode executar o seguinte comando:

for line in $(cat file.txt); do command $line; done
    
por 26.11.2015 / 20:37