Quando você executa todo esse nbq ... find ... | sort ...
, pipeline, o shell divide os comandos da seguinte forma:
nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' |
sort -nr |
head -n 50 |
tee log
Portanto, a única coisa que nbq
vê é o bit antes do primeiro canal. Você precisa parar o shell de fazer isso e, em vez disso, dar a linha inteira para nbq
. Sem qualquer documentação sobre como nbq
analisa e executa o comando, é difícil saber a abordagem correta.
-
Você poderia dizer a
nbq
para executar um shellsh
, com seu one-liner original como um único argumento:nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ sh -c "find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | sort -nr | head -n 50 | tee log"
-
Como alternativa,
nbq
pode ser inteligente o suficiente para gerenciar o pipeline em si (ou, mais provavelmente, iniciar outro shell para fazer o trabalho), caso em que você só precisa escapar de cada|
para protegê-lo do ( atual).nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' \| sort -nr \| head -n 50 \| tee log
-
Se tudo mais falhar, você pode abandonar a abordagem "one-liner" e colocar todo o pipeline em um script:
#!/bin/sh find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' | sort -nr | head -n 50 | tee log
diga
nbq
para executar esse script:nbq -P <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ /path/to/top50.sh