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