有這台機器,只有sh
可用,cut
沒有--output-delimiter
選項,但我需要使用數組,我嘗試了這種方式,它可以在我的工作機器上運行,但缺乏--output-delimiter
使我無法進一步。
在這些限制下,我應該如何繼續保持與我的工作機器相同的結果?
我無法使用,-d '\n'
因為它不只一個字符,我的數組方法會拋出新行而不是空格。常用工具的功能可能會減少(編譯busybox的人認為合適)busybox中不可用的命令將不可用。
#!/system/bin/sh
count=0
LOG=/data/media/0/Logs/MountBind.log
SDID="C10E-14EE"
SOURCES=""
SOURCES="${SOURCES} /storage/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/default/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/read/MicroSD/Data";SOURCES="${SOURCES} /mnt/runtime/write/MicroSD/Data";
TARGETS=""
TARGETS="${TARGETS} /storage/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/default/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/read/$SDID/Data";TARGETS="${TARGETS} /mnt/runtime/write/$SDID/Data";
mountbind() {
for SOURCE in $SOURCES; do
count=$((count + 1))
echo $SOURCE >>$LOG
su --mount-master mount -o bind $SOURCE $(echo $TARGETS | cut -d ' ' -f$count --output-delimiter=\n) 1>>$LOG
done
}
mountbind
echo "\n******************************************\nMount output\n******************************************" >> $LOG
mount >> $LOG
chown 1023:1023 $LOG
chmod 770 $LOG
答案1
痛苦地。
你能做的就是用 awk 來代替。 awk,甚至 BusyBox awk,可以完成 shell 可以完成的大部分工作,只是語法開銷更大。它有關聯數組,你想要多少就多少。您可以透過 呼叫外部命令system
。甚至還有重定向和管道功能,儘管它比 shell 中的限制更多。
如果您想要一個不接受任何輸入的 awk 腳本,請將所有程式碼放在一個BEGIN
區塊中。
就你而言,如果我正確理解你想要做什麼,你就不需要 awk。您不需要cut
處理TARGET
字串:使用參數擴充。 BusyBox 灰和噓既支持${VAR#PREFIX}
又朋友。只要您的路徑不包含空格,這就很容易實現。
mountbind() {
for SOURCE in $SOURCES; do
TARGET=${TARGETS%% *}; TARGETS=${TARGETS#* }
su --mount-master mount -o bind "$SOURCE" "$TARGET" 1>>"$LOG"
done
}