2013-04-18 32 views
6

Bất kỳ ý tưởng nào sai với mã này?Vấn đề biến dạng vỏ khi cố gắng mkdir

CLIENT_BUILD_DIR="~/Desktop/TempDir/" 

if [ ! -d $CLIENT_BUILD_DIR ] 
then 
    { 
     mkdir $CLIENT_BUILD_DIR 
    } 
fi 

Tôi gặp lỗi: mkdir: ~/Desktop: Không có tệp hoặc thư mục nào như vậy.

Rõ ràng là thư mục là có và kịch bản hoạt động nếu tôi thay thế các biến với ~/Desktop/TempDir/

+1

Một mẹo khác, bạn có thể đơn giản hóa mã thành '[-d $ CLIENT_BUILD_DIR] || mkdir $ CLIENT_BUILD_DIR' và tốt nhất là thêm '|| echo "Lỗi khi cố gắng tạo thư mục: $ CLIENT_BUILD_DIR" ':) – Jite

Trả lời

14

Dấu ngoặc kép ngăn mở rộng ~.

Sử dụng:

CLIENT_BUILD_DIR=~/Desktop/TempDir/ 

if [ ! -d "$CLIENT_BUILD_DIR" ] 
then mkdir "$CLIENT_BUILD_DIR" 
fi 
+1

Điều đó đã làm được! Cảm ơn rất nhiều –

+1

Bạn có thể 'eval' nó quá :) – Jite

5

Nhân vật ~ không phải là diễn giải lại khi được sử dụng trong một biến.

Thay vào đó, bạn có thể sử dụng CLIENT_BUILD_DIR="$HOME/Desktop/TempDir/".

+0

Chỉ cần tiết kiệm thời gian cho tôi và rất nhiều cú đập đầu tường! – Moseleyi

6

Tại sao không chỉ đơn giản là:

mkdir -p "$CLIENT_BUILD_DIR" 

Note -p.

+0

Mẹo tuyệt vời! Cảm ơn! –

Các vấn đề liên quan