圆括号()和花括号{}在Linux中创建后台进程方面有什么区别[关闭]

8yparm6h  于 5个月前  发布在  Linux
关注(0)|答案(1)|浏览(57)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

22天前关闭
Improve this question
我使用( )&尝试了下面的代码,但它没有分配我的IP地址,而且看起来wait语句不会等待。同样的代码在没有( )&的情况下也能工作。还有什么其他可能的方法来并行执行这个( )&代码块?如果我使用花括号,会发生什么?
简单来说
iface[i]是eth0、eth1、eth2、eth3等
nic_count是eth端口的数量。
最初分配所有ip_addr[i]=0。

i=0 
while ((i < Snic_count )); do
    if [[ ${#ip_addr[$i]} == 0 ]]; then
    (
           dhclient ${iface[$i]};
           sleep 10
           ip_addr[$i]=`ip 4 -a show ${iface[$i]} | awk '/inet/ {gsub("/..$","",$2); print $2}'`
           if [[ ${#ip_addr[$i]} == 0 ]]; then
                 echo -e "Unable to assign an IP address for ${iface[$i]}"
           fi
     )&    
    fi
    1+=1
done 
wait

字符串

lsmd5eda

lsmd5eda1#

好了,我终于弄明白了。新的子进程的数据一旦返回到父进程就被销毁了。所以解决方案是我把每个IP地址写到一个外部文件中,比如.(echo ip_addr[$i] > ip_num$i)无论如何,如果有人能想出一个主意来避免太多的文件创建,我将不胜感激。

while ((i < Snic_count )); do
    if [[ ${#ip_addr[$i]} == 0 ]]; then
    (
           dhclient ${iface[$i]};
           sleep 10
           ip_addr[$i]=`ip 4 -a show ${iface[$i]} | awk '/inet/ {gsub("/..$","",$2); print $2}'`
           if [[ ${#ip_addr[$i]} == 0 ]]; then
                 echo -e "Unable to assign an IP address for ${iface[$i]}"
           fi
           #save each output ip to a separate file.
           echo ip_addr[$i] > ip_num$i
     )&    
    fi
    1+=1
done 
wait

字符串

相关问题