На этот вопрос уже есть ответ здесь:
Я написал новый текстовый файл в / bin
с именем ram
, который содержит:
watch -n 1 free -h
и файл sen
:
watch -n 1 sensors
в одной папке, чтобы каждый раз не вводить
watch blahblahblah...
.
Кроме того, я изменил права доступа этих двоих с
-rw-r--r--
на
-rw-r--r-x
и достиг своей цели. Он работал даже после повторного открытия оболочки, то есть тогда я мог набрать ram
вместо watch -n 1 free -h
Но проблема возникла после того, как я попробовал ту же процедуру для
cd /home/myname/Downloads/
и новый текстовый файл, сохраненный в / bin
и названный dow
, то же самое с разрешениями.
На этот раз dow
ничего не делает в терминале, даже не показывает никаких сообщений.
Я попытался сохранить тот же файл в / usr / bin
, но снова терминал ничего не делает, и мой рабочий каталог не меняется.
Как такое возможно?
Вы записали сценарий, и он работает. Это просто не делает то, что Вы хотите, потому что сценарий работает в отдельной оболочке от оболочки, которая называет его.
Оболочка, что выполнения сценария в делают точно, чему сценарий говорит ее; это изменяет свой рабочий каталог на ~/Downloads
. Нет ничего иного, чтобы это сделало, таким образом, это выходит. Каталог оболочки вызова не был изменен.
Вы не имеете к честное слово - можно продемонстрировать это путем добавления ls
на следующей строке Вашего dow
файл. Содержание Вашего ~/Downloads
каталог (принимающий это имеет некоторых) будет затем перечислен при выполнении команды (без обычных цветов, которые обеспечиваются псевдонимом в Вашем ~/.bashrc
тот неинтерактивные оболочки не читают).
Для выполнения сценария в текущей оболочке можно использовать source
команда, которая может также быть записана как . file
. Так, если Вы вводите
. dow
Ваша текущая оболочка изменит каталог.
Или, можно вместо этого установить псевдоним:
zanna@toaster:~$ alias dow='cd $HOME/Downloads'
zanna@toaster:~$ dow
zanna@toaster:~/Downloads$
Для создания этого постоянным добавьте строку
alias dow='cd $HOME/Downloads'
к Вашему ~/.bashrc
файл. Это затем будет доступно каждый раз, когда Вы выполняете интерактивную оболочку.
Это - дубликат перекрестного сайта: https://stackoverflow.com/a/255415/383694.
Проблема - то, что скрипт запущен в подоболочке. Каталог изменений сценария и затем закрывается, не внося изменения в Вашу текущую оболочку.
Два смягчения:
. dow
сделать сценарий выполненным в контексте текущей оболочки.alias dow="cd /home/myname/Downloads/"
.При изменении каталога, это обычно - хорошая идея протестировать это, это работало прежде, чем сделать другие вещи.
В связанном вопросе существуют некоторые другие опции.