У меня есть скрипт bash, который я использую для перемещения из исходных каталогов в каталог bin из любого места, где я сейчас нахожусь (этот скрипт я называю «телепорт»). Так как это в основном просто прославленная команда 'cd', я должен запустить ее в текущей оболочке (то есть ./teleport.sh). Я установил псевдоним в своем файле .bashrc, чтобы «телепорт» соответствовал ». teleport.sh.
При первом запуске он работает нормально. Но потом, если я запустлю его снова после того, как он запустится один раз, он ничего не сделает. Это работает снова, если я закрываю свой терминал, а затем открываю новый, но только в первый раз. Моя интуиция заключается в том, что внутри BASH происходит что-то внутреннее, с чем я не знаком, поэтому я подумал, что проведу это через гуру, чтобы посмотреть, смогу ли я получить ответ.
Сценарий:
numargs=$#
function printUsage
{
echo -e "Usage: $0 [-o | -s] <PROJECT>\n"
echo -e "\tMagically teleports you into the main source directory of a project.\n"
echo -e "\t PROJECT: The current project you wish to teleport into."
echo -e "\t -o: Teleport into the objdir.\n"
echo -e "\t -s: Teleport into the source dir.\n"
}
if [ $numargs -lt 2 ]
then
printUsage
fi
function teleportToObj
{
OBJDIR=${HOME}/Source/${PROJECT}/obj
cd ${OBJDIR}
}
function teleportToSrc
{
cd ${HOME}/Source/${PROJECT}/src
}
while getopts "o:s:" opt
do
case $opt in
o)
PROJECT=$OPTARG
teleportToObj
;;
s)
PROJECT=$OPTARG
teleportToSrc
;;
esac
done
Мое использование это что-то вроде:
sjohnson@corellia:~$ cd /usr/local/src
sjohnson@corellia:/usr/local/src$ . ./teleport -s some-proj
sjohnson@corellia:~/Source/some-proj/src$ teleport -o some-proj
sjohnson@corellia:~/Source/some-proj/src$
<... START NEW TERMINAL ...>
sjohnson@corellia:~$ . ./teleport -o some-proj
sjohnson@corellia:~/Source/some-proj/obj$