Когда вы запустите весь этот nbq ... find ... | sort ...
, shell разделяет команды следующим образом:
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
Поэтому единственное, что видит nbq
, это бит перед первой трубой. Вам нужно запретить оболочке делать это, и вместо этого передать всю строку nbq
. Без документации о том, как nbq
разбирает и выполняет команду, трудно определить правильный подход.
Вы можете сказать nbq
выполнить оболочку sh
, с вашим оригинальным однострочным предложением в качестве единственного аргумента:
nbq -P <пул> -q <слот> -c <машина> -J <файл журнала> --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"
В качестве альтернативы, nbq
может быть достаточно умным, чтобы управлять конвейером самостоятельно (или, что более вероятно, запустить другую оболочку для выполнения работы), в этом случае вам нужно только экранировать каждый |
, чтобы защитить его от (текущей) оболочки.
nbq -P <пул> -q <слот> -c <машина> -J <файл журнала> --task-name checkdisk \
find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n' \| sort -nr \| head -n 50 \| tee log
Если ничего не получается, можно отказаться от подхода "одной строки" и поместить весь конвейер в скрипт:
#!/bin/sh
find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n'| |
sort -nr |
head -n 50 |
tee log
затем скажите nbq
запустить этот скрипт вместо этого:
nbq -P -q -c -J --task-name checkdisk \
/path/to/top50.sh