usando watch run 2 comandos

42

Eu tenho que assistir dois comandos nas mesmas janelas do terminal. Quero dizer algo como

watch du -h filename.txt && df -h

Mas está mostrando apenas uma saída.

Então, o que estou pensando é que talvez não seja possível usar o watch para executar vários comandos na mesma janela.

Se houver alguma maneira, por favor me avise.

Obrigado.

rɑːdʒɑ
fonte

Respostas:

67

Você pode citar os comandos:

watch "du -h filename.txt && df -h"

E eles serão executados juntos.

Oli
fonte
Obrigado Oli. realmente PC do escritório, para não ousar fazer experimentos. tão postado aqui para a solução certa. Obrigado.
rɑːdʒɑ
Ei, você tem certeza que eles vão funcionar? porque quando executar Estou recebendo algum permissão negada erro" df:` / usr / raja / hostctrl / novo ': Permissão negada "
rɑːdʒɑ
Essa parece ser uma questão separada. Você veria esse problema mesmo sem ele estar envolvido.
Oli
3
Esteja ciente de que isso funciona porque esses comandos de exemplo retornam com true . Caso o primeiro retorno de comando falsa o segundo comando não seria executado (por causa de boolean evaluation shortcut)
karatedog
3
FTR, meu comando usa &&porque o OP usa &&. A combinação de comandos e sua vinculação é incidental para a resposta.
Oli
19

Se você deseja garantir que os dois comandos sejam executados, uma das maneiras é separá-los com, em ;vez de &&.

watch 'du -h filename.txt; df -h'

&&permite a execução do segundo comando (segundo operando, à direita de &&) somente se o primeiro comando for executado com êxito (status de saída 0). Se esse é o comportamento pretendido, vá com &&.

Pranav Kulkarni
fonte
1
Essa forma de ponto e vírgula me parece melhor como resposta à pergunta original. Se você deseja "executar dois comandos", use um ponto e vírgula! Se você quiser "executar um comando, talvez outro" use && .... #
314 JeremyDouglass
3

Por uma questão de completude ...

 watch 'du -h filename.txt || true && df -h'

O '|| true 'faz com que o primeiro comando seja avaliado como verdadeiro, mesmo que falhe por algum motivo. Isso permitirá que o próximo comando após o && seja executado, independentemente da saída do primeiro. Provavelmente, isso é desnecessário para o cenário, apenas mostrando que é possível.

Geofferey
fonte
-1

Para que vários comandos sejam executados simultaneamente, use um único &operador entre os comandos. Gostar:

dothis & dothat

Para esclarecer qualquer confusão, veja como funcionam os diferentes operadores:

c1 & c2  # Run both commands parallelly
c1 ; c2  # Run both commands one by one
c1 && c2 # Run c2 only if c1 exits successfully
c1 || c2 # Run c2 only if c1 fails
Vibhum Bhardwaj
fonte
c1 e c2 não executam os dois comandos em paralelo, se c1 for executado com êxito, apenas c2 será executado.
rɑːdʒɑ