簡體   English   中英

使用變量將路徑傳遞到BASH腳本

[英]Passing a path to BASH script with a variable

我已經寫了一個小腳本,在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說明:

hdiutil: create: Only one image can be created at a time.

如果我手動輸入密碼的話,我對格式哪里出了問題有些困惑。

任何幫助將不勝感激。

干杯

克里斯

在所有位置引用所有變量:

echo -n "$varPass" | hdiutil create -encryption -stdinpass -type SPARSEBUNDLE -size "${varSize}G" -fs HFS+J -volname "$varName" "$path"

您需要做的就是引用參數擴展名。 這足以保護空白。 手動添加反斜杠僅會創建一個不代表現有路徑的值。

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM