Изменение каталога ‘cd’ с помощью bash

#bash

#bash

Вопрос:

Я хочу изменить каталог в Linux, используя файл bash. Ниже приведен используемый фрагмент кода.

 #!/bin/bash
alias proj="cd /home/prag/Downloads"
  

Но при запуске файла bash ответа нет, т. е. он остается в том же каталоге. Почему это так.? Почему здесь не работает псевдоним или я должен сделать что-то другое.?

Ответ №1:

Запуск файла bash не сработает, поскольку изменение текущего рабочего каталога остается в скрипте (поскольку это отдельный процесс по сравнению с процессом, который выдает вам командную строку — bash).

Добавьте псевдоним в ваш файл ~/.bash_aliases или ~/.bashrc (предпочтительнее первое, второе может быть быстрее, если первое не существует), и тогда это должно сработать.

Комментарии:

1. спасибо, что прояснили это. можете ли вы помочь мне в написании псевдонима, поскольку я новичок в bash.

2. Вы уже написали это. Просто скопируйте ‘псевдоним proj=»cd /home/prag/Downloads»‘ в ваш файл .bash_aliases или .bashrc. Сохраните его, затем закройте свой терминал и снова откройте его, и ваша команда должна сработать.

3. @pragadheesh: Если это ответило на ваш вопрос, не могли бы вы отметить это как ответ? Спасибо.

Ответ №2:

У каждого процесса есть свой собственный текущий каталог. Когда вы запускаете скрипт bash, и он изменяет свой текущий каталог, а затем существует, это никак не влияет на родительский процесс (то есть оболочку, из которой вы запускаете скрипт).

Вместо запуска ./script.sh попробуйте source ./script.sh (или . ./script.sh для краткости).

Кроме того, определение alias for cd само по себе не приведет к изменению каталога. Я предполагаю, что вы на самом деле где-то вызываете псевдоним.

Ответ №3:

Вы хотите сказать, что хотите написать скрипт bash, который перенесет cd в другой каталог?

Тогда зачем использовать псевдоним? Просто используйте команду «cd»!

Комментарии:

1. Для ускорения. Если вы часто заходите в этот каталог, то имеет смысл присвоить ему псевдоним. У меня есть небольшая программа и запись bash_aliases, которую я использую, которая позволяет мне хранить «закладки» терминала. Я просто набираю ‘pj foo’, и это приводит меня к каталогу, сохраненному под этим именем.

Ответ №4:

Это потому, что ваш скрипт выполняется в новом процессе оболочки, когда вы вызываете его как ./cd.sh . Таким образом, ваш скрипт изменит каталог в этой подоболочке, и когда ваш скрипт завершит работу, управление вернется к вашей предыдущей оболочке.

Вы можете вызвать свой скрипт подобным образом . cd.sh — при этом скрипт выполняется в текущей командной строке, и cd-команда работает.