2012-10-15 43 views
34

Tôi có một tập tin chính sử dụng (từ chính tôi làm một nguồn) một tập tin thuộc tính với các biến trỏ đến đường dẫn.Làm cách nào để nhập đường dẫn có khoảng trắng?

Các thuộc tính tập tin trông như thế này:

TMP_PATH=/$COMPANY/someProject/tmp 
OUTPUT_PATH=/$COMPANY/someProject/output 
SOME_PATH=/$COMPANY/someProject/some path 

Vấn đề là SOME_PATH, tôi phải sử dụng một con đường với không gian (Tôi không thể thay đổi nó).

Tôi đã cố gắng thoát khỏi khoảng trắng, với dấu ngoặc kép, nhưng không có giải pháp cho đến nay.

Tôi chỉnh sửa các đường dẫn, vấn đề với dấu ngoặc kép duy nhất là tôi đang sử dụng một biến khác $COMPANY trong đường dẫn

Trả lời

45

Sử dụng một trong những threee biến thể:

SOME_PATH="/mnt/someProject/some path" 
SOME_PATH='/mnt/someProject/some path' 
SOME_PATH=/mnt/someProject/some\ path 
+0

điều cuối cùng đã làm cho tôi. cảm ơn – CW0007007

+0

@ CW0007007: Trên thực tế, cả ba đều chính xác –

+0

Có nhưng tôi đã \ thoát không gian rồi. Không nói những người khác đã sai. – CW0007007

1
SOME_PATH=/mnt/someProject/some\ path 

nên làm việc

+0

Yea Tôi đã cố gắng thoát khỏi nhân vật, nhưng trong trường hợp đó mang lại cho tôi "/ mnt/someProject/some "mà không có" đường dẫn " – Federico

+0

Nó có thể phải làm điều gì đó với hệ điều hành của bạn sau đó. Bảng điều khiển bash chuẩn sẽ hoạt động. Bạn đang sử dụng hệ điều hành nào? – meza

+0

Tôi đang sử dụng ubuntu – Federico

15

Bạn có thể thoát khỏi "không gian" char bằng cách đặt một \ ngay trước đó.

+4

Tôi đã làm điều đó, và did't làm việc – Federico

+0

Bạn đã bao bọc đường dẫn đó trong bất kỳ trích dẫn nào? –

+1

Đã được giải quyết. Vấn đề là trong một tài liệu tham khảo là biến mà không có dấu ngoặc kép – Federico

0

Nếu tập tin chỉ chứa tập tham số, bạn có thể sử dụng vòng lặp sau ở vị trí của nguồn nó:

# Instead of source file.txt 
while IFS="=" read name value; do 
    declare "$name=$value" 
done < file.txt 

này giúp bạn tiết kiệm phải báo bất cứ điều gì trong tập tin, và cũng an toàn hơn, vì bạn không mạo hiểm thực thi mã tùy ý từ file.txt.

+0

Đây có thể là một giải pháp. Vấn đề là có nhiều thứ hơn là gán. Cảm ơn! – Federico

25

Tôi thấy Federico bạn đã tự mình tìm ra giải pháp. Vấn đề ở hai nơi. Việc chỉ định cần trích dẫn thích hợp, trong trường hợp của bạn

SOME_PATH="/$COMPANY/someProject/some path" 

là một trong những giải pháp khả thi.

Nhưng trong vỏ những dấu ngoặc kép không được lưu trữ trong một bộ nhớ, vì vậy khi bạn muốn sử dụng biến này, bạn cần phải trích dẫn lại một lần nữa, ví dụ:

NEW_VAR="$SOME_PATH" 

bởi vì nếu không, không gian sẽ được mở rộng đến cấp độ lệnh, như sau:

NEW_VAR=/YourCompany/someProject/some path 

không phải là thứ bạn muốn.

Để biết thêm thông bạn có thể kiểm tra bài viết của tôi về nó http://www.cofoh.com/white-shell

+3

Điều này thực sự phải được đánh dấu là câu trả lời đúng. Chi tiết về việc tự trích dẫn các biến có vẻ là điều chính khiến mọi người đi lên (tôi được bao gồm!) – pospi

+0

Thông tin quan trọng đã giúp tôi thực tế là các dấu ngoặc kép được sử dụng trong định nghĩa biến không trở thành một phần của giá trị của biến, do đó, biến phải được trích dẫn lại khi được sử dụng. – bassim

0

Nếu đường dẫn trong Ubuntu là "/ home/EC2-user/Tên của thư mục", sau đó làm điều này:

1) Java xây dựng.thuộc tính file:

build_path='/home/ec2-user/Name\\ of\\ Directory' 

đâu ~/ bằng /home/ec2-user

2) Jenkinsfile:

build_path=buildprops['build_path'] 
echo "Build path= ${build_path}" 
sh "cd ${build_path}" 
Các vấn đề liên quan