No GNOME-Terminal/Bash, a saída STD pode ser executada diretamente (interpretada?) Como um comando?
-
26-09-2019 - |
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.
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.