Chinaunix

标题: 如何让执行的命令后台执行? [打印本页]

作者: burt2007    时间: 2012-12-27 12:14
标题: 如何让执行的命令后台执行?
本帖最后由 burt2007 于 2012-12-27 12:22 编辑

问题如下:

for ((m=0;m<10;m++))
do
    /usr/bin/sqlite3 user_${m}.db 1>/logs/importsqlite3.log 2>&1 <<EOF
CREATE TABLE user(uid BIGINT);
CREATE INDEX uid ON user(uid);
.import /hashuids/uids_${m}.csv user
.quit
EOF
done

执行以上命令,顺序执行耗时比较长,怎么让EOF之间的命令能在后台并行执行呢?

如果写成
for ((m=0;m<10;m++))
do
    /usr/bin/sqlite3 user_${m}.db 1>/logs/importsqlite3.log 2>&1 & <<EOF
CREATE TABLE user(uid BIGINT);
CREATE INDEX uid ON user(uid);
.import /hashuids/uids_${m}.csv user
.quit
EOF
done
就不执行了

作者: waker    时间: 2012-12-27 12:18
这是问题还是答案?
作者: burt2007    时间: 2012-12-27 12:21
回复 2# waker

问题。

怎么让EOF之间的命令能在后台并行执行呢?
   
作者: davidbeckham921    时间: 2012-12-27 13:32
我理解第一种方式执行EOF里的命令是一行一行顺序执行的,第二种直接放后台的方式人家已经都扔后台里了,是执行完了。不是你说的不执行了吧。

要不sh -x执行你的脚本看看程序干嘛去了。
作者: Shell_HAT    时间: 2012-12-27 14:12
  1. for ((m=0;m<10;m++))
  2. do
  3. (    /usr/bin/sqlite3 user_${m}.db 1>/logs/importsqlite3.log 2>&1 <<EOF
  4. CREATE TABLE user(uid BIGINT);
  5. CREATE INDEX uid ON user(uid);
  6. .import /hashuids/uids_${m}.csv user
  7. .quit
  8. EOF
  9. )&
  10. done
复制代码

作者: burt2007    时间: 2012-12-27 14:22
回复 5# Shell_HAT

试了,可以。
多谢!


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2