Bash子进程在执行eval exec时会杀死父进程

 2021-04-08 

Bash child process kills parent when doing eval exec

我编写了以下代码来为多个文件执行python脚本。当script.py执行并完成循环中的第一个文件时,父进程存在。我没有找到捕获此出口的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

args=
for arg in"$@";
do
  args="$args '$arg'"
done

for file in /home/andrew/Downloads/xmls/*
do
        echo $file
        eval exec"python script.py $file $args"
done

它不会退出。因为您正在exec -shell,所以它被python进程替换。

删除exec以使python进程作为当前shell的子代产生。

这里也不需要eval,并且$args可以替换为$@

1
python script.py"$file""$@"