Você precisa converter seu script em uma função 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
}
O motivo é que cada processo tem seu próprio diretório atual e, quando você executa um programa a partir do shell, ele é executado em um novo processo. O "cd", "pushd" e "popd" padrão são incorporados ao interpretador de shell para que afetem o processo do shell.
Ao tornar seu programa uma função de shell, você está adicionando seu próprio comando em processo e qualquer alteração de diretório é refletida no processo de shell.
pushd
(possivelmente redirecionado para>/dev/null
suprimir sua saída) em vez decd
, poderá retornar posteriormente ao diretório anterior compopd
.