我是shell脚本的新手,任何人都可以解释下面的代码
ls *.py > xx
while [ 1 ]
do
read myline || break
python $myline
python $myline --genxml
done<xx
service nac-ms restart
Thnaks Mukthyar
答案 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 ...