Bạn cần chuyển đổi tập lệnh của mình sang hàm shell:
#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
# . ~/bin/myprog.sh
#
function myprog() {
A=$1
B=$2
echo "aaa ${A} bbb ${B} ccc"
cd /proc
}
Lý do là mỗi quy trình có thư mục hiện tại của riêng nó và khi bạn thực thi một chương trình từ trình bao thì nó được chạy trong một quy trình mới. Tiêu chuẩn "cd", "pushd" và "popd" được tích hợp vào trình thông dịch shell để chúng ảnh hưởng đến quá trình shell.
Bằng cách biến chương trình của bạn thành hàm shell, bạn đang thêm lệnh trong tiến trình của riêng mình và sau đó mọi thay đổi thư mục sẽ được phản ánh trong tiến trình shell.
pushd
(có thể được chuyển hướng>/dev/null
để triệt tiêu đầu ra của nó) thay vào đócd
, bạn có thể quay lại thư mục trước đó vớipopd
.