我有一些sql文件,想要转储到我的本地数据库,首先我使用了这个shell命令,但它不起作用
ls *.sql|xargs -i mysql -uroot -p123456 foo < {}
zsh: no such file or directory: {}
但下面可以正常工作
echo hello | xargs -i echo {} world
hello world
那么为什么第一个命令不起作用?
答案 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