这篇博客将持续更新,用于记录自己在shell编程中遇到的问题~
1. 多个子shell命令调用
如果在一个shell里面调用了多个其它的子shell,注意是否需要在调用之间增加sleep。
问题举例: 在编写postgresql测试脚本的时候,在一个shell里面需要后台启动postgres进程,然后再调用psq执行命令,代码如下:
bin/postgres -D mydb >logfile 2>&1 &
bin/psql -c "\l" testdb
但是在执行的时候,总是报如下错误:
psql: could not connect to server: 没有那个文件或目录
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
在纠结了一整天以后,我终于在goolge中找到了答案:https://bugzilla.redhat.com/show_bug.cgi?id=557749
原因是在调用了第一条命令以后,postgres进程还没有完全启动,所以psql在访问服务的时候报错。解决办法就是在两者之间加上一个sleep,如下:
bin/postgres -D mydb >logfile 2>&1 &
sleep 2
bin/psql -c "\l" testdb
2. ...