スペースを処理したいbashスクリプトがあります。これについてここにたくさんの質問があることは知っていますが、問題を解決できませんでした.
私が読んだことによると、次のように動作するはずです。のスペース
../tool_profile/OS\ Firmware/updater
がエスケープされています。スクリプトでは、$2
変数は に割り当てられるときに引用符で囲まれていますDEST
。
ls
コマンドラインでこのパスを引用符で囲んだり、スペースをエスケープしたりして渡すと、機能します。
スクリプト コマンドの例:
./make_initramfs.sh initramfs_root/ ../tool_profile/OS\ Firmware/updater/ initramfs
スクリプト内の ls からのエラー:
ls: cannot access ../tool_profile/OS Firmware/updater/: No such file or directory
make_initramfs.sh:
#!/bin/bash
if [ $# -ne 3 ]; then
echo "Usage: `basename $0` <root> <dest> <archive_name>"
exit 1
fi
ROOT=$1
DEST="$2"
NAME=$3
echo "[$DEST]"
# cd and hide output
cd $ROOT 2&>/dev/null
if [ $? -eq 1 ]; then
echo "invalid root: $ROOT"
exit 1
fi
ls "$2" # doesn't work
ls "$DEST" # doesn't work
# check for 'ls' errors
#if [ $? -eq 1 ]; then
# echo "invalid dest: $DEST"
# exit 1
#fi
#sudo find . | sudo cpio -H newc -o | gzip --best > "$DEST"/"$NAME"
私が間違っていることの手がかりをありがとう!^_^