为什么xargs无法接收参数

时间:2016-01-16 12:04:03

标签: xargs

我有一些sql文件,想要转储到我的本地数据库,首先我使用了这个shell命令,但它不起作用

ls *.sql|xargs -i mysql -uroot -p123456 foo < {}
zsh: no such file or directory: {}

但下面可以正常工作

echo hello | xargs -i echo {} world
hello world

那么为什么第一个命令不起作用?

1 个答案:

答案 0 :(得分:1)

在运行任何命令之前,shell会处理重定向。如果您希望xargs处理重定向,则需要运行子shell。

ls *.sql | xargs -i sh -c 'mysql -uroot -p123456 foo < {}'

但是,您不应该使用ls来驱动脚本。你想要

for f in *.sql; do
    mysql -uroot -p123456 foo <"$f"
done

或者很可能只是

cat *.sql | mysql -uroot -p123456 foo