Mysql 如何摆脱bash:$1:xargs命令上的不明确重定向

Mysql 如何摆脱bash:$1:xargs命令上的不明确重定向,mysql,bash,Mysql,Bash,我正试图在给定数据库上使用sql设置执行多个文件: ls -lah | grep "sql$" | awk '{print $9}' | xargs mysql -uanuser -papassword a_database < $1 如果我将xargs上的命令更改为一个简单的echo$1,它就会工作 我已经试过这样的双引号:xargs-mysql-uauser-papassword a_数据库

我正试图在给定数据库上使用sql设置执行多个文件:

ls -lah | grep "sql$"  | awk '{print $9}' | xargs mysql -uanuser -papassword a_database < $1
如果我将xargs上的命令更改为一个简单的
echo$1
,它就会工作

我已经试过这样的双引号:
xargs-mysql-uauser-papassword a_数据库<“$1”
,而这个
“xargs-mysql-uauser-papassword a_数据库<$1”
,运气不好,终端又出现了一个错误:

xargs: mysql -uanuser -papassword a_database < {}: No such file or directory
xargs:mysql-uauser-papassword a_数据库<{}:没有这样的文件或目录

您能帮助我吗?

您不需要使用
ls-l | grep | awk
,请在
*文件上使用简单的for循环。sql
文件:

for f in *.sql; do
   mysql -uanuser -papassword a_database < "$f"
done
用于*.sql中的f;做
mysql-uanuser-papassword a_数据库<“$f”
完成

以下是xargs方法的工作原理:

ls -lha | grep "sql$" | awk '{print $9}' | xargs -t -n1 -I{} bash -c "mysql -uanuser -papassword a_database < '{}'"
ls-lha | grep“sql$”| awk'{print$9}'| xargs-t-n1-I{}bash-c“mysql-uauser-papassword a_数据库<'{}”

ls-lah | grep“sql$”| awk'{print$9}'| xargs | mysql-uauser-papassword a|u数据库<$1Hi@IndraUprade它尝试过,但给了我一个错误:
bash:$1:不明确的重定向xargs:echo:被信号13终止
另一个问题是,
xargs
已经从管道获得了它的标准输入,还有
谢谢@chepner,我将尝试另一种方法。如果您仍然热衷于使用
xargs
,您可以
找到-name\*.sql-print0 | xargs-n1-I{}-0bash-c“mysql-uauser-papassword a_数据库<'{}'
。如果它写在一行中,则是
完成之前需要
这对我来说很有用,谢谢它只需要在*.sql中f的
完成之前稍微更改一个分号;mysql-uauser-papassword a_数据库<“$f”;完成
ls-lha | grep“sql$”| awk“{print$9}”
应替换为
find-键入f-名称“*.sql”-print0
。和
-0
应作为选项传递给
xargs
,以正确解析
find
的输出。即使文件名包含空格、换行符、制表符,这也能起作用……感谢@alvits在这个过程中我也找到了
xargs
-t
参数,它在执行命令之前打印命令,并与
-p
结合使用,执行命令之前可以检查命令是否正常,我学到了很多!
ls -lha | grep "sql$" | awk '{print $9}' | xargs -t -n1 -I{} bash -c "mysql -uanuser -papassword a_database < '{}'"