Скрипти оболонки запускаються усередині подоболочки, і кожна подоболочка має свою власну концепцію того, що являє собою поточний каталог. cd процвітає, але як тільки подоболочка виходить, ви повернулися в інтерактивну оболонку і там нічого не змінилося.
Один із способів обійти це - замість цього використовувати псевдонім:
Ти нічого не робиш! Ви змінили каталог, але тільки всередині подоболочки, яка запускає скрипт.
Ви можете запустити скрипт в поточному процесі за допомогою команди «dot»:
Але я вважав за краще б, щоб пропозиція Грега використовувало псевдонім в цьому простому випадку.
cd в вашому скрипті технічно працював, оскільки він змінив каталог оболонки, в якій виконувався скрипт, але це був окремий процес, який було видно з вашої інтерактивної оболонки.
Сумісний з Posix спосіб вирішити цю проблему полягає в тому, щоб визначити процедуру оболонки, а не скрипт командного рядка.
Ви можете просто ввести його або помістити в один з різних файлів запуску оболонки.
Щоб створити сценарій bash, який буде записуватися в каталог cd:
Створити файл сценарію
Потім створіть псевдонім в вашому файлі запуску.
- Я створив файл запуску, в якому я скидаю все свої псевдоніми і настроюються функції.
- Потім я відправляю цей файл в свій .bashrc, щоб він був встановлений при кожному завантаженні.
Наприклад, створіть файл основних псевдонімів / функцій: /scripts/mastercode.sh
(Помістіть псевдонім в цей файл.)
Потім в кінці вашого файлу .bashrc.
Тепер його легко записати в каталог java, просто введіть cdjava, і ви там.
cd виконується в оболонці скрипта. Коли сценарій закінчується, ця оболонка виходить, а потім ви залишаєтеся в каталозі, в якому ви були. «Джерело» сценарію, не запускайте його. замість:
(Зверніть увагу на точку і пробіл перед ім'ям скрипта.)
Ідея Джеремі Рутена по використанню символічного посилання викликала думка, що не перейшла ні на один інший відповідь. Використання:
Провідна ободова кишка важлива; Це означає, що якщо в поточному каталозі є каталог «dir», тоді «cd dir» зміниться на це, замість того, щоб стрибати кудись ще. З встановленим значенням, як показано, ви можете зробити:
І якщо в поточному каталозі немає підкаталогу java, то він перенесе вас безпосередньо в $ HOME / projects / java - немає псевдонімів, ні скриптів, немає сумнівних exec або точкових команд.
My $ HOME - / Users / jleffler; Мій $ CDPATH:
Я отримав свій код для роботи, використовуючи.
/
Ось моя програма
Ось мій термінал