请解释用于执行python文件的shell代码

时间:2012-02-08 13:48:46

标签: python sh

我是shell脚本的新手,任何人都可以解释下面的代码

ls  *.py > xx
while [ 1 ]
do
read myline || break
python $myline 
python $myline --genxml 
done<xx
service nac-ms restart

Thnaks Mukthyar

1 个答案:

答案 0 :(得分:7)

它列出当前工作目录中的所有.py文件,并将输出放在文件xx中:

ls  *.py > xx

然后循环,从xx读取:

while [ 1 ]
do
read myline || break
...
done<xx

对于每一行,$myline设置为该行的值。它运行

python $myline 
python $myline --genxml 

在上面的每一行中用$myline的值代替$ myline。然后运行

service nac-ms restart

参考文献:


如果文件名称中包含空格或\n个字符,则此代码不是很安全。例如,如果文件名为which file.py,则

python $myline

运行

python which file.py

而不是

python "which file.py"

这可以通过在$ myline周围加上双引号来解决:

python "$myline"
python "$myline" --genxml

如果文件名具有\n字符,则ls命令将在多行上打印单个文件名。所以read myline不会玷污整个文件名。脚本将再次破坏。

可以使用模式

修复此问题
find . -iname "*.py" -print0 | xargs -0 ...