Nhận thư mục từ tập lệnh được gọi từ


10

Tôi có một kịch bản doSmthtrong /usr/bin. Có thể lấy và in thư mục mà script được gọi từ đâu không?

Vì vậy, nếu tôi gọi doSmthtừ /home/međầu ra sẽ được /home/me.


Trong ngôn ngữ nào?
jordanm

Uhh, trong bash :)
Primož Kralj

Câu trả lời:


11

Khi bạn gọi một lệnh trong shell, tiến trình mới sẽ kế thừa thư mục làm việc của cha mẹ. Dưới đây là hai cách để có được thư mục làm việc:

echo "$PWD" # variable
pwd         # builtin command

1

Bởi "thư mục nó được gọi từ" bạn dường như có nghĩa là thư mục làm việc của nó. Bạn có thể thay đổi điều này bên trong tập lệnh bằng cách sử dụng, ví dụ cd, nhưng trước khi bạn làm như vậy, pwdsẽ in nó ra. Nó cũng có khả năng là trong biến$PWD

Nếu bạn cần thư mục làm việc ban đầu sau khi thay đổi, chỉ cần lưu nó ở đầu tập lệnh của bạn (trước khi thay đổi)

#!/bin/bash
initial_wd=`pwd`

# ... do a lot of stuff ...
# ⋮

cd "$initial_wd"

Nếu bạn đang sử dụng điều này để quay lại thư mục bạn đã bắt đầu, hãy xem thêm pushdpopd.


3
Trong bash, cũng có "$ OLDPWD".
jordanm

@jordanm Thật vậy, nhưng đó không nhất thiết phải là thư mục làm việc ban đầu (ví dụ: nếu bạn đã sử dụng cdhai lần)
derobert

$ OLDPWD là những gì tôi cần; Tôi chạy các tập lệnh bash từ Dấu nhắc CMD trên Win7 và đây là biến môi trường chứa thư mục tôi chạy tập lệnh từ đó. Chúc mừng
Darren Giám mục
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.