2012-07-12 94 views
3

我有一個bash腳本,我想處理空格。我知道這裏有很多關於這方面的問題,但我無法解決我的問題。BASH腳本:處理具有轉義空格的路徑

根據我讀過的內容,以下內容應該可以工作。 ../tool_profile/OS\ Firmware/updater中的空間正在逃脫。在腳本中,$2變量在被分配到DEST時被引用在引號中。

如果我將此路徑引入到用引號引起來的ls中,或者在命令行中使用了空格,它就可以工作。

示例腳本命令:從LS

./make_initramfs.sh initramfs_root/ ../tool_profile/OS\ Firmware/updater/ initramfs 

誤差在腳本:

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

大...對我張貼了這個,我才意識到我在做什麼錯了......我想。 – rkyser 2012-07-12 18:41:16

+1

是的。在檢查相對路徑是否正確之前,我更改目錄。所以在改變之後,相對路徑不再有效。 – rkyser 2012-07-12 18:43:38

+0

我建議將其寫成答案(回答自己的問題沒有錯)或者完全刪除問題。 – chepner 2012-07-12 18:47:28

回答

0

好吧......就這樣正確,我提交了這個,我意識到我做錯了。

在驗證第二個之前,我正在傳遞兩條相對路徑並更改爲第一條路徑。所以一旦我改變目錄,第二個相對路徑不再有效。一旦完成,我會發布更新後的腳本。

編輯:我完成了我的腳本。見下文。編輯2:我根據每個人的評論更新了這個。感謝大家!

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" 
+1

你想對腳本發表評論嗎? (如果是這樣,有http://codereview.stackexchange.com) – kojiro 2012-07-12 19:38:33

+1

爲什麼你使用ls來檢查文件或目錄的存在? '[[-d dir]]或'[[-e dir]]''怎麼樣? – jordanm 2012-07-12 22:49:15

+0

謝謝你的好評! – rkyser 2012-07-13 13:55:21

相關問題