bsub命令内使用输出重定向与进程替换失败的技术咨询
在bsub中使用重定向和进程替换的正确姿势
当然可以在bsub命令里用输出重定向和进程替换啦,你遇到的问题核心不是转义符号,而是bsub默认用sh执行命令,而<(...)这种进程替换是bash专属特性,sh根本不认识它,所以转义再多也没用~
给你两个靠谱的解决方案:
方案一:显式指定bash执行命令
把你的命令包裹在bash -c里,让bsub调用bash来解析这些bash特有的语法,写法如下:
bsub -q short "bash -c 'cat <(head -2 myfile.txt) > outputfile.txt'"
如果你的命令里本身有双引号,记得转义内部的双引号:
bsub -q short "bash -c \"cat <(head -2 myfile.txt) > outputfile.txt\""
方案二:把命令写到脚本里(适合复杂场景)
如果你的实际命令特别复杂,嵌套引号多到头疼,最稳妥的方式是把逻辑写到一个bash脚本里:
- 新建脚本文件(比如
my_script.sh):
#!/bin/bash # 这里可以写任意复杂的bash命令,包括进程替换、重定向、变量等 cat <(head -2 myfile.txt) > outputfile.txt
- 给脚本加执行权限:
chmod +x my_script.sh
- 用bsub执行脚本:
bsub -q short ./my_script.sh
为什么之前的转义没用?
你之前尝试转义<和(,只是让这些符号原封不动传递给了sh,但sh本身不支持进程替换语法,所以不管怎么转义,sh都没法解析<(head -2 myfile.txt)这部分,必须让bash来处理才行~
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

