Bash аварийно завершает работу при выполнении общих команд [closed]

Когда вы запустите весь этот 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
    
1
26.09.2014, 10:40
0 ответов

Теги

Похожие вопросы