я виделэтот ответс тех пор как искал это, но изначально я написал этот скрипт:
for i in `seq 1 $1`;
do cd ../;
done;
Он не меняет каталог. Почему это, работает как
./updir.sh 5
решение1
Запуск скрипта, как вы показываете, создает копию среды в подоболочке, и любые вносимые вами изменения, такие как настройка каталогов или переменных среды, влияют только на эту среду подоболочки, а не на вызывающую оболочку.
Чтобы внести изменения в текущую оболочку из скрипта, необходимо запустить скрипт в текущей оболочке с помощью команды source
или .
:
. ./updir.sh 5
Вы можете сделать это автоматически с помощью псевдонима:
alias updir='. ./updir.sh'
В качестве альтернативы вы можете использовать функцию вместо скрипта:
updir()
{ for i in `seq 1 $1`;
do cd ../;
done
}
решение2
Поскольку скрипты запускаются в подоболочке, которая отслеживает текущий рабочий каталог отдельно. Самое простое решение — использовать функцию:
function updir() {
for i in $(seq 1 $1); do
cd ..
done
}