Tôi đã đọc này câu hỏi và câu trả lời, nhưng nó không bỏ phù hợp với vấn đề của tôi, thậm chí tho nó tương tự.
Tôi đang viết một kịch bản (được gọi là cpj) sẽ khởi chạy một trong những dự án hiện tại của tôi. Tôi có khoảng 5 người trong số họ. Khi tôi gõ
$ cpj blah
Tôi muốn thư mục làm việc hiện tại thay đổi thành thư mục dự án blah (mà tôi giữ trong $ PROJDIR) và tôi muốn emacsclient mở tệp chính cho dự án đó (mà tôi giữ trong $ MAINFILE).
Câu hỏi tôi đã trích dẫn nói rằng bạn không thể trực tiếp thay đổi môi trường của trình bao chạy tập lệnh, nhưng bạn có thể lấy một tập lệnh và nó sẽ làm như vậy.
Để kiểm tra điều này, tôi đã viết một kịch bản shell (được gọi là chcwd) có một dòng:
cd $1
Nếu, từ dòng lệnh tôi làm:
$ . chcwd $PROJDIR
thư mục làm việc hiện tại của tôi sẽ thay đổi như tôi mong muốn. Mặt khác, từ tập lệnh cpj của tôi, tôi có cùng một dòng:
. chcwd $PROJECT
nó sẽ không thay đổi thư mục làm việc hiện tại của shell. Tôi nhận ra rằng tôi đang chạy 2 tập lệnh (cpj và sau đó là chcwd), và vì vậy, tạo 2 shell, nhưng tôi thấy không có cách nào để thực hiện những gì tôi muốn. Bất cứ ai có thể chỉ cho tôi làm thế nào để thực hiện mục tiêu của tôi?