シェルスクリプトが使いづらい

Cygwin上でプログラムを組んでいるので、シェルスクリプトGCC(正確には特定のプラットフォームの拡張GCC)を
使っているわけだが、このシェルスクリプトがとっても使いづらいです。


現状で使いづらい箇所は2箇所あって、
一つ目はシェル1からシェル2を起動して
環境変数をセットした後、シェル1に戻ってくるとシェル2で登録した環境変数
なくなっていること。
二つ目はシェル内部でカレントディレクトリの変更ができないこと。


一つ目に関しては、Makefileのincludeを使用することにより、問題を解決できたが
二つ目に関しては、解決方法が思いつかなくて困ってます。