No GNOME-Terminal/Bash, a saída STD pode ser executada diretamente (interpretada?) Como um comando?

StackOverflow https://stackoverflow.com/questions/3825554

Pergunta

Acabei de sair da carroça, e o Gnome-terminal e Bash estão ótimos, mas não sei como fazer o que eu quero (suspeito que seja possível).
A saída STD (por exemplo, da SED) pode ser feita para ser executada como um comando?
(ou seja. Interprete e execute a saída como parte da lógica do script.)
Estou pesquisando um processo para gerar seu status em intervalos cronometrados e gostaria de fazê -lo como um revestimento.

# dd is already running in another terminal. Its PID is 1234
pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p'  
# this outputs: sudo watch 30 kill -USR1 1234  

Existe algum terminal/magia de curta duração para correr sudo watch 30 kill -USR1 1234? Obrigado.

Foi útil?

Solução

Você deve ser capaz de envolvê -lo $():

$(pgrep ... | sed ...)

Mas por que não fazer:

while :; do sleep 30; clear; kill -USR1 $(pgrep '^dd$'); done

Outras dicas

Enrole -o dentro de $ (). $ () atribui saída padrão como uma variável de ambiente. Por si só, isso executa o comando impresso.

$(pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p')

Basta colocar os comandos para sh:

pgrep -l '^dd$' | sed -n 's/^\([0-9]\+.*\)/sudo watch -n 30 kill -USR1 \1/p' | sh

Só porque isso ocorre relativamente alto em determinadas pesquisas no Google, adicionarei esta resposta.

Se você colocar `` em torno de um comando, a saída será redirecionada em uma string, que se for por si só, será executado como um comando.

Por exemplo, isso será executado 'Echo 3':

`echo "echo 3"`

Além disso, isso pode funcionar com várias camadas, por exemplo:

``echo "echo echo 3"``

Irá ecoar '3', porque o primeiro eco dá 'Echo Echo 3', que lança outro eco que dá 'Echo 3' que é executado.

Eu sempre uso o `` em vez de $ () ou | sh / | bash porque eu pessoalmente acho que parece mais limpo dentro de scripts. Mas funciona quase exatamente como $ () (não acredito que haja diferenças, mas pode haver pequenas).

Uma das coisas que você pode fazer com $ () e `` que você não pode fazer | Bash está atribuindo variáveis. Você pode armazenar a saída e executá -la mais tarde:

azdefvar="`COMMAND_THAT_OUTPUTS_COMMAND`"

Aqui está um exemplo:

daboross@DaboUbuntu:~$ date +%T
13:09:20
daboross@DaboUbuntu:~$ azdef="`echo "date +%T"`"
daboross@DaboUbuntu:~$ echo $azdef
date +%T
daboross@DaboUbuntu:~$ $azdef
13:09:45
daboross@DaboUbuntu:~$ echo $azdef | bash
13:09:53

Você pode usar $ () em vez de `` em qualquer um desses casos.

A chave `está diretamente abaixo da tecla ESC na maioria dos teclados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top