2013-09-24 65 views
7

Tôi gặp vấn đề lạ khi làm việc với ngôn ngữ kịch bản bash. Dưới đây là nó:Bash script awkwardness với pwd

PWD=${pwd} 
# several commands 
cd /etc/nginx/sites-enabled/ 
# more commands 
cd $PWD 
# I expect that I returning to my directory, 
# but $PWD contains current dir - /etc/nginx/sites-enabled/ 

behaiveour Đây là một số loại lười biếng - $ cửa hàng PWD lệnh, mà tính toán thư mục hiện hành và trả lại nó trong giây phút mà chúng ta gọi $ PWD. Nhưng tôi muốn lưu trữ biến chuỗi trong đó. Làm thế nào để làm điều đó?

Trả lời

21

PWD là biến môi trường và được thay đổi khi bạn thay đổi thư mục.

Sử dụng một tên khác nhau cho các biến,

ví dụ:

MYPWD=${PWD} #or MYPWD=$(pwd) 
cd /etc/nginx/sites-enabled/ 
cd $MYPWD 
+0

Hãy để nó ở đây như một câu hỏi về tài liệu. Khoảng một nửa của một giờ để giải quyết vấn đề này. –

+3

Bạn nên sử dụng tên viết thường (hoặc hỗn hợp) cho các biến của mình, để tránh xung đột như thế này ... –

2

Hãy thử:

PWD=`pwd` 

Hoặc:

PWD=$(pwd) 

Cả hai biểu thức sẽ thực hiện pwd lệnh và lưu trữ đầu ra lệnh trong biến PWD vỏ. Có rất nhiều cuộc thảo luận trên web về thời điểm sử dụng từng kiểu. Một điểm mà tôi nhớ lại là cách tiếp cận "$ (cmd)" cho phép lồng các lệnh, ví dụ:

CURRENT_BASENAME=$(basename $(pwd)) 

Chỉnh sửa - Chỉ xảy ra với tôi rằng PWD là biến hệ vỏ được tích hợp luôn mở rộng đến thư mục làm việc hiện tại.

+1

số tôi đã tồi tệ tập trung và không đề cập đến, đó là $ PWD - là một biến hệ thống và luôn luôn trỏ tới thư mục hiện tại . 'HPWD = $ (pwd)' hoạt động tốt. –