我的代码旨在找到一个/jar文件夹,循环遍历.jar文件并创建具有相同文件名的.xml和.trigger文件。此外,它在XML文件中创建一个~ID~ filename ~ID~字段。
我得到错误
mkdir: cannot create directory '': No such file or directory
我已经设置了/tmp文件夹,包括/xml/jar和/trigger文件夹,所以那些不存在的不是问题。
#!/bin/bash
jar_dir= /c/Users/hi/Desktop/Work/tmp/jar
xml_dir= /c/Users/hi/Desktop/Work/tmp/xml
trigger_dir= /c/Users/hi/Desktop/Work/tmp/trigger
# the following creates output directories if they don't exist
mkdir -p "${xml_dir}"
mkdir -p "${trigger_dir}"
# we start the for loop through all the files named `*.jar` located in the $jar_dir directory
for f in $(find ${jar_dir} -name "*.jar")
do
file_id=$(basename -s .jar ${f}) # extract the first part of the file name, excluding .jar
echo "<ID>${file_id}</ID>" > ${xml_dir}/${file_id}.xml
touch ${trigger_dir}/${file_id}.trigger # this one just creates an empty file at ${trigger_dir}/${file_id}.trigger
done
命令:
jar_dir= /c/Users/hi/Desktop/Work/tmp/jar
完全等价于
jar_dir="" /c/Users/hi/Desktop/Work/tmp/jar
并告诉shell运行命令/c/Users/hi/Desktop/Work/tmp/jar
,将环境变量jar_dir
设置为空字符串(仅在该命令的持续时间内)。如果/c/.../jar
是一个目录,那也会给你一个错误。
要将/c/.../jar
字符串赋值给变量,请丢掉空格。
您得到的错误消息来自mkdir
试图用空名称创建目录。(这有点令人困惑)
对于shell脚本的问题,将脚本粘贴到https://www.shellcheck.net/通常会有帮助,因为它可以识别大多数常见的错误,并告诉我们该怎么做。
查看这些关于SO和unix的帖子。讨论SE:
- 命令未发现Bash变量赋值错误
- 在变量赋值后在同一行运行命令是shell可移植的吗?
- shell脚本中变量赋值中的空格
xml_dir= /c/Users/hi/Desktop/Work/tmp/xml
等号后面不能有空格。所以xml_dir=/c/Users/hi/Desktop/Work/tmp/xml