我写了一个小脚本,在OSX中使用hdiutil
,但是在将路径传递到包含空格的输出变量时遇到了问题。只需通过用户将路径文件夹拖动到终端窗口,然后将其读取到变量中即可生成路径。基本上我有路径:
echo "Drag Destination Folder to Window or Leave Blank to Create on Desktop:"
read createDest
createDest=$(echo "$createDest" | sed 's/ /\\ /g')
然后我提示输入所需的名称
echo "Enter Name for Image (also used for Volume):"
read varName
varName=$(sed -e 's/[^A-Za-z0-9._-]/_/g' <<< $varName) #remove illegal chars
将它们与
path=$(echo ${createDest}/${varName})
最后用
生成文件Echo -n $varPass | hdiutil create -encryption -stdinpass -type SPARSEBUNDLE -size ${varSize}G -fs HFS+J -volname $varName $path
只要路径中没有空格,这一切都可以正常工作,但是一旦hdiutil
出现错误,我便指出:
hdiutil: create: Only one image can be created at a time.
如果我手动输入密码的话,我对格式哪里出错感到有些困惑。
任何帮助将不胜感激。
欢呼
克里斯
答案 0 :(得分:1)
在所有地方引用所有变量:
echo -n "$varPass" | hdiutil create -encryption -stdinpass -type SPARSEBUNDLE -size "${varSize}G" -fs HFS+J -volname "$varName" "$path"
答案 1 :(得分:1)
您需要做的就是引用参数扩展;这足以保护空白。手动添加反斜杠仅会创建一个不代表现有路径的值。
echo "Drag Destination Folder to Window or Leave Blank to Create on Desktop:"
read createDest
echo "Enter Name for Image (also used for Volume):"
read varName
varName=${varName//[^[:alnum:]._-]/_} # more efficient than running sed
printf '%s' "$varPass" | hdiutil create -encryption -stdinpass -type SPARSEBUNDLE -size "${varSize}G" -fs HFS+J -volname "$varName" "$path"