Linux - чому «cd» не працює в сценарії оболонки bash shell, code q - a російська (ru)

Скрипти оболонки запускаються усередині подоболочки, і кожна подоболочка має свою власну концепцію того, що являє собою поточний каталог. 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:

Я отримав свій код для роботи, використовуючи. .

/ доза не працює, тому що вона не змінює ваш каталог в терміналі, це просто змінює каталог, специфічний для цього скрипта.

Ось моя програма

Ось мій термінал

Схожі статті