Estou tentando executar top
com vários PIDs usando -p
opção e xargs
. No entanto, top
falha ao executar com erro top: failed tty get
:
$ pgrep gvfs | paste -s -d ',' | xargs -t top -p
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
top: failed tty get
Eu usei a -t
opção para xargs
ver o comando completo que está prestes a ser executado. Parece bom e eu posso executá-lo com sucesso manualmente:
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
No entanto, ele não é executado com xargs
. Por que é que?
Acontece que existe uma opção especial
--open-tty
paraxargs
aplicativos interativos comotop
. De man xargs :O comando a ser executado
top
deve ser:top
é um programa interativo, por exemplo, você pode digitari
para alternar a exibição de processos ociosos. Embora possa organizar a leitura/dev/tty
na prática, espera que o stdin esteja conectado ao terminal.Para o seu exemplo, basta usar substituição de comando em vez de
xargs
, por exemploO shell primeiro executa o pgrep e cola, obtém a saída desses comandos e, em seguida, invoca top com essa saída.