- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 bash 脚本中调用 xargs 以并行启动函数时遇到问题。
我有这一行:
grep -Ev '^#|^$' "$listOfTables" | xargs -d '\n' -l1 -I args -P"$parallels" bash -c "doSqoop 'args'"
启动我之前导出的函数 doSqoop
。
我传递给 xargs
然后传递给 bash -c
一个很长的行,包含我在函数内部拆分和处理的字段。
它类似于 schema|tab|dest|desttab|query|splits|....
我通过上面的 grep 命令从文件中读取的内容。我对这个解决方案很好,我知道 xargs 可以在 |
上拆分行,但我可以这样。
它过去工作得很好,因为我不得不在末尾添加另一个字段,其中包含这种值:
field1='varchar(12)',field2='varchar(4)',field3='timestamp',....
现在我有这个错误:bash: -c: line 0: unexpected token '(' 附近的语法错误
我试图转义单引号和单引号,但没有成功。
在我看来 bash -c
正在解释参数
最佳答案
使用可以调用导出函数的 GNU parallel,语法更简单,功能更多。
您的示例命令可以替换为
grep -Ev '^#|^$' file | parallel doSqoop
用下面的脚本测试:
#!/bin/bash
doSqoop() {
printf "%s\n" "$@"
}
export -f doSqoop
grep -Ev '^#|^$' file | parallel doSqoop
您还可以使用 -P
选项设置进程数,否则它会匹配您系统中的核心数:
grep -Ev '^#|^$' file | parallel -P "$num" doSqoop
关于linux - xargs bash -c 意外标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43820191/
据我了解,Linux 中的 xargs 命令可用于获取一个命令的输出并将其作为另一个命令的输入传递。但是,我注意到将 xargs 作为参数传递给自身会执行以前简单的输出,如果它在没有参数的情况下被调用
如何让 xargs 对给定的每一行输入精确执行一次命令?它的默认行为是对行进行分块并执行一次命令,将多行传递给每个实例。 From http://en.wikipedia.org/wiki/Xargs
我正在使用 xargs 尝试回显文件名,后跟其内容。这是命令 find output/ -type f | xargs -I {} sh -c "echo {} ; cat {}" 但是由于某种原因,
xargs 擅长插入初始参数: seq 0 10 | xargs -n 3 echo foo 产生这个输出: foo 0 1 2 foo 3 4 5 foo 6 7 8 foo 9 10 当我还想要尾
为什么 找到 . -名称“*.xml” | xargs grep FOO 返回与文件名的匹配,而 find 。 -名称“*.xml” | xargs -i -sh -c "grep FOO {}" 不
每 xargs --help: -L, --max-lines=MAX-LINES use at most MAX-LINES non-blank input lines per command li
我有以下 3 个命令(每个都包含 xargs 和并行进程),我想将它们一起并行运行。 1. ls filenames_for_bld*_all | xargs -i bash -c 'calculat
我刚发现两个命令之间的区别: echo sum.txt| xargs cat 这会输出sum.txt的内容 echo sum.txt| xargs -0 cat 这显示错误: cat: sum.txt
考虑以下几点: $ echo index.html* | xargs -L 1 ls -l -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.h
我想做类似的事情: find . -type f | xargs cp dest_dir 但是xargs将dest_dir用作初始参数,而不是最终参数。我想知道: 是否可以为xargs指定最终参数?
zgrep -i XXX XXX | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs -0 -I string echo
简而言之,这是我的问题 $ echo 'for i in $@; do echo arg: $i; done; echo DONE' > /tmp/test.sh $ echo "ac\nbc\ncc
我正在尝试将一些 .flac 文件转换为 .mp3,以便将其导入 iTunes。我尝试使用 find、xargs 和 ffmpeg,但 xargs 给我一个未终止的引号错误(因为我的文件名中有引号)。
我正在尝试设置一个脚本,以根据 transmission-remote 的输出自动删除 .torrent 文件。 transmission-remote http://localhost/transm
我想了解Rampion's code中xargs man的使用: screen -t man /bin/sh -c 'xargs man || read' 感谢 Rampion:我们不需要猫! 为什么
我遇到的问题是通配符量词由于某种原因没有通过 xargs 传递给命令。 假设,我们有包含以下内容的文件 file1: -l -a f* 我们需要通过 xargs 将参数传递给 ls。 cat file
我正在尝试处理位于磁盘上许多不同位置的 DVD 文件。它们的共同点是它们(每组输入文件)都位于名为 VIDEO_TS 的目录中。每种情况下的输出都是一个以该目录的父目录命名的文件。 我知道我可以获得每
我有一个 xargs 命令: xargs -a es_doc_positions.txt -P 64 -I {} populate_es_index.py --start {} --end {} 是否
我有一个 C 程序,它通过 i2c 连续读取加速度计数据。每当平板电脑的方向发生变化时,它都会向标准输出输出一个新行。 现在,我希望能够在 bash 脚本中使用该输出来更改屏幕的旋转。 现在,问题是这
我知道我可以使用 xargs 获取文件列表并为每个文件运行一次命令。 我想做的是将文件列表作为单个参数列表传递给命令。例如: ls |尾部-10 输出 a b c d 但我想将它传递给一个命令,它将接
我是一名优秀的程序员,十分优秀!