2012-04-30 37 views
104

Tôi biết tôi có thể sử dụng lệnh cd để thay đổi thư mục làm việc của tôi trong bash.Tạm thời thay đổi thư mục làm việc hiện tại trong bash để chạy lệnh

Nhưng nếu tôi làm lệnh này:

cd SOME_PATH && run_some_command 

Sau đó, thư mục làm việc sẽ được thay đổi vĩnh viễn. Có cách nào để thay đổi thư mục làm việc tạm thời như thế này không?

PWD=SOME_PATH run_some_command 
+1

tại sao không giữ nó đơn giản ** cd SOME_PATH && run_some_command && cd - ** lệnh cuối cùng sẽ đưa bạn trở lại thư mục pwd ngoái. – Sahil

Trả lời

186

Bạn có thể chạy cd và thực thi trong một subshell bởi kèm theo dòng lệnh trong một cặp ngoặc đơn:

(cd SOME_PATH && exec_some_command) 

Demo:

$ pwd 
/home/abhijit 
$ (cd /tmp && pwd) # directory changed in the subshell 
/tmp 
$ pwd    # parent shell's pwd is still the same 
/home/abhijit 
+0

Đó là loại vô hiệu hóa điểm của việc sử dụng 'exec', bạn không nghĩ sao? – tripleee

+0

@tripleee: Tôi đoán OP có nghĩa là để thực thi bất kỳ thực thi nào và không phải là exec. – codaddict

+0

không hoạt động trong tệp vỏ –

18

Something như thế này nên làm việc :

sh -c 'cd /tmp && exec pwd' 
+0

cá nhân tôi đào phiên bản này –

+0

tất cả các câu trả lời là tuyệt vời, nhưng đây là chính xác những gì tôi đang tìm kiếm – mkrufky

+0

+ ngắn và ngọt ngào !! Cảm ơn bạn –

82

bash có BUILTIN

pushd SOME_PATH 
run_stuff 
... 
... 
popd 
+3

+1, pushd/popd là lý tưởng cho việc này. Chỉ cần đừng quên popd trước khi bạn thoát. – Fr0sT

+11

Không nhất thiết phải là một giải pháp tốt nếu run_stuff có thể thất bại (và kịch bản thoát). Bạn sẽ bị kẹt trong SOME_PATH. –

+1

@ ron.rothmanℝℝ bạn không thể làm điều gì đó giống như 'pushd PATH; (run_stuff); [["$?" ! = 0]] & & popd; ...; popd' – galois

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