Mẹo/thủ thuật điều hướng dòng lệnh Linux 3 - biến môi trường CDPATH

theanh

Administrator
Nhân viên
Trong phần đầu tiên của loạt bài này, chúng ta đã thảo luận chi tiết về lệnh cd - và trong phần thứ hai, chúng ta đã xem xét sâu hơn về các lệnh pushdpopd cũng như các tình huống mà chúng hữu ích.

Tiếp tục thảo luận về các khía cạnh điều hướng dòng lệnh, trong hướng dẫn này, chúng ta sẽ thảo luận về biến môi trường CDPATH thông qua các ví dụ dễ hiểu. Chúng tôi cũng sẽ thảo luận một số chi tiết nâng cao liên quan đến biến này.

Biến môi trường CDPATH​

Ngay cả khi công việc dòng lệnh của bạn liên quan đến việc thực hiện tất cả các hoạt động trong một thư mục cụ thể - chẳng hạn như thư mục home của bạn - thì bạn cũng phải cung cấp đường dẫn tuyệt đối khi chuyển đổi thư mục. Ví dụ, hãy xem xét một tình huống mà tôi đang ở trong thư mục /home/himanshu/Downloads:
Mã:
$ pwd
/home/himanshu/Downloads
Và yêu cầu là chuyển sang thư mục /home/himanshu/Desktop. Để thực hiện việc này, thông thường, tôi sẽ phải chạy:
Mã:
cd /home/himanshu/Desktop/
hoặc
Mã:
cd ~/Desktop/
hoặc
Mã:
cd ../Desktop/
Sẽ dễ dàng hơn nếu tôi có thể chạy lệnh sau:
Mã:
cd Desktop
Có, điều đó có thể. Và đây là nơi biến môi trường CDPATH xuất hiện. Bạn có thể sử dụng biến này để xác định thư mục cơ sở cho lệnh cd.

Nếu bạn thử in giá trị của nó, bạn sẽ thấy biến env này mặc định là trống:
Mã:
$ echo $CDPATH
$
Bây giờ, hãy xem xét trường hợp chúng ta đã thảo luận cho đến nay, hãy sử dụng biến môi trường này để xác định /home/himanshu làm thư mục cơ sở cho lệnh cd.

Cách dễ nhất để thực hiện điều này là:
Mã:
export CDPATH=/home/himanshu
Và bây giờ, tôi có thể làm những gì tôi không thể làm trước đó - từ bên trong thư mục /home/himanshu/Downloads, hãy chạy lệnh cd Desktop thành công.
Mã:
$ pwd
/home/himanshu/Downloads
$ [B]cd Desktop/[/b]
[B]/home/himanshu/Desktop[/b]
$
Điều này có nghĩa là bây giờ tôi có thể thực hiện lệnh cd đến bất kỳ thư mục nào trong /home/himanshu mà không cần chỉ định rõ ràng /home/himanshu hoặc ~ hoặc ../(hoặc nhiều ../) trong lệnh cd.

Những điểm cần ghi nhớ​

Bây giờ bạn đã biết cách chúng ta sử dụng biến môi trường CDPATH để dễ dàng chuyển đổi đến/từ /home/himanshu/Downloadstừ/đến /home/himanshu/Desktop. Bây giờ, hãy xem xét một tình huống trong đó thư mục /home/himanshu/Desktopchứa một thư mục con có tên là Downloads và đó là thư mục con mà bạn định chuyển đổi.

Nhưng đột nhiên bạn nhận ra rằng thực hiện lệnh cd Desktop sẽ đưa bạn đến /home/himanshu/Desktop. Vì vậy, để đảm bảo điều đó không xảy ra, bạn thực hiện:
Mã:
cd ./Downloads
Mặc dù không có vấn đề gì trong lệnh đã đề cập ở trên, nhưng đó là một nỗ lực bổ sung từ phía bạn (dù nhỏ đến đâu), đặc biệt là khi bạn phải thực hiện việc này mỗi khi tình huống như vậy xảy ra. Một giải pháp thanh lịch hơn cho vấn đề này có thể là đặt biến CDPATH ban đầu theo cách sau:
Mã:
export CDPATH=".:/home/himanshu"
Điều này có nghĩa là bạn đang yêu cầu lệnh cd trước tiên tìm kiếm thư mục trong thư mục làm việc hiện tại, sau đó thử tìm kiếm thư mục /home/himanshu. Tất nhiên, việc bạn có muốn lệnh cd hoạt động theo cách này hay không hoàn toàn phụ thuộc vào sở thích hoặc yêu cầu của bạn - ý tưởng của tôi khi thảo luận về điểm này là để cho bạn biết rằng tình huống này có thể phát sinh.

Như bạn đã hiểu, sau khi biến env CDPATH được đặt, giá trị của nó - hoặc tập hợp các đường dẫn mà nó chứa - là những nơi duy nhất trên hệ thống mà lệnh cd tìm kiếm các thư mục (trừ các trường hợp bạn sử dụng đường dẫn tuyệt đối). Vì vậy, bạn phải đảm bảo rằng hành vi của lệnh vẫn nhất quán.

Tiếp theo, nếu có một tập lệnh bash sử dụng lệnh cd với relativepath, thì tốt hơn hết là xóa hoặc hủy cài đặt biến môi trường CDPATH trước, trừ khi bạn chấp nhận bị mắc kẹt vào các vấn đề không lường trước được. Ngoài ra, thay vì sử dụng lệnh export trên thiết bị đầu cuối để cài đặt CDPATH, bạn có thể cài đặt biến môi trường trong tệp .bashrc của mình sau khi kiểm tra các shell tương tác/không tương tác để đảm bảo rằng thay đổi bạn đang cố gắng thực hiện chỉ được phản ánh trong các shell tương tác.

Thứ tự xuất hiện của các đường dẫn trong giá trị của biến môi trường cũng rất quan trọng. Ví dụ, nếu thư mục hiện tại được liệt kê trước /home/himanshu, thì lệnh cd sẽ tìm kiếm thư mục trong thư mục làm việc hiện tại trước rồi mới chuyển đến /home/himanshu. Tuy nhiên, nếu giá trị là "/home/himanshu:."thì tìm kiếm đầu tiên sẽ được thực hiện trong /home/himanshu và sau đó là thư mục hiện tại. Không cần phải nói, điều này sẽ ảnh hưởng đến những gì lệnh cd thực hiện và có thể gây ra sự cố nếu bạn không biết thứ tự của các đường dẫn.

Luôn ghi nhớ rằng biến môi trường CDPATH, như tên gọi của nó, chỉ hoạt động với lệnh cd. Điều này có nghĩa là khi ở trong thư mục /home/himanshu/Downloads, bạn có thể chạy lệnh cd Desktop để chuyển sang thư mục /home/himanshu/Desktop, nhưng bạn không thể thực hiện lệnh ls. Sau đây là một ví dụ:
Mã:
$ pwd
/home/himanshu/Downloads
[B]$ ls Desktop[/b]
[B]ls: cannot access Desktop: No such file or directory[/b]
$
Tuy nhiên, có thể có một số giải pháp đơn giản. Ví dụ, chúng ta có thể đạt được điều mình muốn với nỗ lực tối thiểu theo cách sau:
Mã:
$ [B]cd Desktop/;ls[/b]
/home/himanshu/Desktop
backup backup~ Tải xuống gdb.html outline~ outline.txt outline.txt~
Nhưng đúng là không có giải pháp thay thế cho mọi tình huống.

Một điểm quan trọng khác: như bạn có thể đã quan sát, bất cứ khi nào bạn sử dụng lệnh cd với biến môi trường CDPATH được đặt, lệnh sẽ tạo ra đường dẫn đầy đủ của thư mục bạn đang chuyển đến trong đầu ra. Không cần phải nói, không phải ai cũng muốn có thông tin này mỗi khi họ chạy lệnh cd trên máy của họ.

Để đảm bảo đầu ra này bị ẩn, bạn có thể sử dụng lệnh sau:
Mã:
alias cd='>/dev/null cd'
Lệnh đã đề cập ở trên sẽ tắt tiếng đầu ra bất cứ khi nào lệnh cd thành công, nhưng sẽ cho phép tạo ra các thông báo lỗi bất cứ khi nào lệnh không thành công.

Cuối cùng, trong trường hợp bạn gặp phải sự cố trong đó sau khi đặt biến môi trường CDPATH, bạn không thể sử dụng tính năng hoàn thành tab của shell, thì bạn có thể thử cài đặt và bật bash-completion - thêm thông tin về nó tại đây.

Kết luận​

Biến môi trường CDPATH là con dao hai lưỡi - nếu không được sử dụng một cách thận trọng và có kiến thức đầy đủ, nó có thể bạn đang ở trong một số bẫy phức tạp có thể đòi hỏi rất nhiều thời gian quý báu của bạn để giải quyết. Tất nhiên, điều đó không có nghĩa là bạn không bao giờ nên thử; chỉ cần đánh giá tất cả các tùy chọn có sẵn và nếu bạn kết luận rằng việc sử dụng CDPATH sẽ rất hữu ích, thì hãy tiếp tục và sử dụng nó.

Bạn đã sử dụng CDPATH như một chuyên gia chưa? Bạn có thêm mẹo nào muốn chia sẻ không? Vui lòng chia sẻ suy nghĩ của bạn trong phần bình luận bên dưới.

 
Back
Bên trên