#!/bin/sh
files = 'ls /myDir/myDir2/myDir3/'
for file in $files do
echo $file
java myProg $file /another/directory/
done
我要做的是遍历/ myDir / myDir2 / myDir3 /下的每个文件名,然后使用该文件名作为调用java程序的第一个参数(第二个参数是“/ another / directory”)
当我运行这个脚本时:。 myScript.sh
我收到此错误: -bash:files:找不到命令
我的剧本中出错了什么?谢谢!
答案 0 :(得分: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
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
并完全避免拨打basename
。
答案 1 :(得分:1)
将files =
中的空格剥离为files=RHS of assignment
答案 2 :(得分:1)
删除'='周围的空格:更改
files = 'ls /myDir/myDir2/myDir3/'
成:
files='ls /myDir/myDir2/myDir3/'
并将'do'语句移动到它自己的行:
for file in $files
do
....
答案 3 :(得分:0)
引用你的变量而不需要使用ls。
#!/bin/sh
for file in /myDir/myDir2/*
do
java myProg "$file" /another/directory/
done