nbq
有人可以告诉如何使用命令行提交单行命令吗?在 Linux 中提交多个命令可以正常工作,但在 nbq 模式下则不行,如下所示。
find /nfs/disks/test_dir/ -name .snapshot -prune -o -printf '%s %p\n'" | sort -nr | head -n 50 | tee log
这仅适用于在 Linux 中捕获检查区域中的前 50 个文件。
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
失败,因为它只执行第一部分而没有识别管道。
答案1
当您运行整个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
看到的是第一个管道之前的部分。您需要阻止 shell 执行此操作,而是将整行交给nbq
.如果没有任何有关如何解析和运行命令的文档nbq
,就很难知道正确的方法。
你可以告诉
nbq
执行一个 shellsh
,用你原来的单行作为单个参数: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"
或者,
nbq
可能足够聪明来管理管道本身(或者更有可能启动另一个 shell 来完成工作),在这种情况下,您只需要转义每个 shell|
即可保护它免受(当前)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
如果一切都失败了,您可以放弃“一行”方法,并将整个管道放在脚本中:
#!/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 <pool> -q <slot> -c <machine> -J <logfile> --task-name checkdisk \ /path/to/top50.sh