Вам потрібно перетворити свій скрипт у функцію оболонки:
#!/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
}
Причина полягає в тому, що у кожного процесу є своя поточна директорія, і коли ви виконуєте програму з оболонки, вона запускається в новому процесі. Стандартні "cd", "pushd" і "popd" вбудовані в інтерпретатор оболонки, щоб вони впливали на процес оболонки.
Здійснюючи вашу програму функцією оболонки, ви додаєте власну команду в процесі, а потім будь-яка зміна каталогу відображається в процесі оболонки.
pushd
(можливо, переспрямовано на>/dev/null
придушення її виводу) замістьcd
, ви можете пізніше повернутися до попереднього каталогуpopd
.