Можно ли изменить текущий каталог из скрипта?
Я хочу создать утилиту для навигации по каталогам в Bash. Я создал тестовый скрипт, который выглядит следующим образом:
#!/bin/bash
cd /home/artemb
Когда я выполняю скрипт из оболочки Bash, текущий каталог не меняется. Можно ли вообще изменить текущий каталог оболочки из скрипта?
bash
environment
artemb
источник
источник
pushd
(возможно, перенаправлено на,>/dev/null
чтобы подавить вывод) вместоcd
, вы можете позже вернуться к предыдущему каталогу с помощьюpopd
.Ответы:
Вам необходимо преобразовать ваш скрипт в функцию оболочки:
Причина в том, что у каждого процесса есть свой текущий каталог, и когда вы запускаете программу из оболочки, она запускается в новом процессе. Стандартные «cd», «pushd» и «popd» встроены в интерпретатор оболочки так, что они влияют на процесс оболочки.
Делая вашу программу функцией оболочки, вы добавляете свою собственную внутрипроцессную команду, и тогда любое изменение каталога отражается в процессе оболочки.
источник
Когда вы запускаете ваш скрипт, создается новый процесс, который наследует только вашу среду. Когда это заканчивается, это заканчивается. Ваша текущая среда остается такой, какая она есть.
Вместо этого вы можете запустить свой скрипт так:
.
Будет оценивать сценарий в текущей среде, поэтому он может быть измененисточник
.sh
расширения полностью EW. Не используйте их.В свете нечитаемости и чрезмерного усложнения ответов, я полагаю, что именно это должен делать запрашивающий
PATH
. scriptname
.
(Точка) будет убедиться , что сценарий не выполняется в детской оболочки.источник
Соединяя вышесказанное, вы можете сделать псевдоним
если вы не хотите писать ведущий "." каждый раз, когда вы хотите отправить свой скрипт в среду оболочки, или если вы просто не хотите помнить, это должно быть сделано для правильной работы скрипта.
источник
~/.bash_aliases
не всегда получается при запуске Bash.Если вы используете bash, вы можете попробовать псевдоним:
в файл .bashrc добавьте эту строку:
когда вы пишете «p» в командной строке, это изменит каталог.
источник
Если вы запустите скрипт bash, он будет работать в своей текущей среде или в среде своих потомков, а не в родительской.
Если цель состоит в том, чтобы запустить вашу команду: goto.sh / home / test Затем поработайте в интерактивном режиме в / home / test, один из способов - запустить интерактивную подоболочку bash в вашем скрипте:
Таким образом, вы будете находиться в / home / test до выхода (выход или Ctrl + C) из этой оболочки.
источник
С помощью pushd текущий каталог помещается в стек каталогов и изменяется на данный каталог, popd получает каталог в верхней части стека и затем изменяет его.
источник
Просто зайдите в
и добавьте этот код рядом с последней строкой:
Затем выйдите из редактора.
Затем введите:
Теперь вы можете использовать: yourcommand в терминале
источник
Я сделал скрипт для изменения каталога. посмотрите: https://github.com/ygpark/dj
источник
В основном мы используем,
cd..
чтобы вернуться из каждого каталога. Я подумал, чтобы было проще, указав количество каталогов, с которыми вам нужно возвращаться за раз. Вы можете реализовать это, используя отдельный файл сценария с помощью команды alias. Например:code.sh
После использования
source code.sh
в текущей оболочке вы можете использовать:вернуться в двух шагах от текущего каталога. Подробно объяснено здесь . Там также объясняется, как поместить код в ~ / .bashrc, чтобы каждая новая открытая оболочка автоматически получала эту новую команду псевдонима. Вы можете добавить новую команду для перехода в определенные каталоги, изменив код, добавив больше
if conditions
и другие аргументы. Вы также можете получить код из git здесь .источник
Этот подход проще для меня.
Предположим, что на персональном iMac, где вы являетесь администратором, в каталоге по умолчанию, когда открывается окно командной строки, / Users / jdoe, это будет каталог для перехода: /Users/jdoe/Desktop/Mongo/db.3.2.1 / бен.
Вот шаги, которые могут сделать работу:
cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin
как первая строка.chmod 755 mongobin
source mongobin
pwd
Вуаля!
источник
Я также создал утилиту под названием goat, которую вы можете использовать для более удобной навигации.
Вы можете просмотреть исходный код на GitHub .
По V2.3.1 на обзорном использование выглядит следующим образом :
источник
Мне нравится делать одно и то же для разных проектов без запуска новой оболочки.
В твоем случае:
Сохраните the_script как:
Затем запустите его:
Затем вы попадаете в каталог с помощью той же оболочки.
источник
Добавьте ниже строку cd в свой шеллскрипт так:
источник
Объявите свой путь:
источник
Просто напишите
PWD
и экспортируйте его в свой скрипт, и изменения будут сохраняться.источник