Shell脚本调试帮助 - 迭代目录中的文件

Sao*_*obi 2 shell

#!/bin/sh
files = 'ls /myDir/myDir2/myDir3/'

for file in $files do
    echo $file
    java myProg $file /another/directory/    
done
Run Code Online (Sandbox Code Playgroud)

我想要做的是遍历/ myDir/myDir2/myDir3 /下的每个文件名,然后使用该文件名作为调用java程序的第一个参数(第二个参数是"/ another/directory")

当我运行这个脚本时:.myScript.sh

我收到此错误:-bash:files:command not found

在我的剧本中我做错了什么?谢谢!

Aln*_*tak 5

按照Neeaj的回答,剥去空白files =.

更好的是,使用:

#!/bin/sh -f
dir=/myDir/MyDir2/MyDir3

for path in $dir/*; do
   file=$(basename $path)
   echo "$file"
   java myProg "$file" arg2 arg3
done
Run Code Online (Sandbox Code Playgroud)

Bash完全能够扩展*通配符本身,而不会产生副本ls来完成它的工作!

编辑:更改为调用basename而不是echo满足OP的(以前未说明的)要求,即回显的路径是相对的而不是绝对的.如果cwd没关系,那么我会更好:

#!/bin/sh -f
cd /myDir/MyDir2/MyDir3

for file in *; do
   echo "$file"
   java myProg "$file" arg2 arg3
done
Run Code Online (Sandbox Code Playgroud)

basename完全避免打电话.