Linux 使用sh-c的带有xargs的多个命令不起作用
我正在尝试运行此命令Linux 使用sh-c的带有xargs的多个命令不起作用,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我正在尝试运行此命令 find . -name "new_impl.jar" | xargs -I '{}' sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL '{}';' 它不工作,并且错误看起来好像无法拾取'{}'的值。当我删除有助于运行multiple命令的sh-c部分时 find . -name "new_impl.jar" | xargs -I '{}' java -jar jd-cli.jar --skipResource
find . -name "new_impl.jar" | xargs -I '{}' sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL '{}';'
它不工作,并且错误看起来好像无法拾取'{}'
的值。当我删除有助于运行multiple命令的sh-c部分时
find . -name "new_impl.jar" | xargs -I '{}' java -jar jd-cli.jar --skipResources -n -g ALL '{}';'
这个命令运行良好。我正在使用Oracle Linux 7。有人能告诉我这背后的原因是什么,还有没有其他方法可以运行多个命令。我建议将文件名作为参数传递给sh
find . -name "new_impl.jar" |
xargs -I '{}' \
sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL "$1";rm "$1";mv *.jar "$1";unzip "$1" -d "$1".bk/;rm "$1"' _ {}
注意:这也适用于从查找使用-exec
find -name "new_impl.jar" \
-exec sh -c 'java -jar jd-cli.jar --skipResources -n -g ALL "$1";rm "$1";mv *.jar "$1";unzip "$1" -d "$1".bk/;rm "$1"' _ {}
为什么要使用xargs
?只需使用查找-execjava-jarjd-cli.jar--skipResources-n-gall{}代码>。这实际上是我的命令的较短版本,在此之后我还有3-4个命令要运行,我在这里没有显示。如果只有命令可以运行,我会遵循你的命令。这是我的完整命令查找-名称为“new_impl.jar”| xargs-I'{}'sh-c'java-jarjd-cli.jar--skipResources-n-gall'{}';rm'{}';mv*.jar'{}';解压'{}'-d'{}'.bk/;rm“{}”您的第二个命令肯定不能正常工作,因为它有未关闭的引号。请发布find的输出-命名为“new_impl.jar”| xargs-I'{}'sh-c'printf'{%s}\n”“$@'{/code>,以及使用java-jar jd-cli.jar--skipsources-n-gall
命令替换其中的printf{%s}\n
时所得到的确切错误。请注意,xargs
将替换-I
的参数,甚至在引号内;那“…{};”
是毫无意义的,会破坏您的脚本。错误是jd-cli.jar需要一个无法获取的输入,并且它会立即将我从远程连接注销。我认为这个sh-c会在Linux环境中以某种方式阻止我,因为我的相同命令在MacOS上运行良好