我有一个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"
感谢您对我做错的任何线索! ^ _ ^
答案 0 :(得分:0)
好的......就在我提交的时候,我意识到我做错了什么。
我正在通过两条相对路径并在验证第二条路径之前更改为第一条路径。因此,一旦我更改了目录,第二个相对路径就不再有效了。一旦完成,我将发布一个更新的脚本。
编辑:我完成了我的脚本。见下文。 Edit2:我根据每个人的评论更新了这个。谢谢大家!
<强> make_initramfs.sh:强>
#!/bin/bash
if (( $# != 2 )); then
echo "Usage: `basename $0` <root> <dest>"
exit 1
fi
root="$1"
archive="${2##*/}"
dest="$PWD/${2%/*}"
# cd and hide errors
cd "$root" &>/dev/null
if (( $? != 0 )); then
echo "invalid path: $root"
exit 1
fi
if [ ! -d "$dest" ]; then
echo "invalid path: $dest"
exit 1
fi
if [ "$archive" = "" ]; then
echo "no archive file specified"
exit 1
fi
if [ `whoami` != root ]; then
echo "please run this script as root or using sudo"
exit 1
fi
find . | cpio -H newc -o | gzip --best > "$dest"/"$archive"