Я написал новый текстовый файл в /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, но снова терминал ничего не делает, и мой рабочий каталог не изменяется.
Как это возможно?
Это межсайтовый дубликат: https://stackoverflow.com/a/255415/383694.
Проблема в том, что скрипт запускается в подоболочке. Сценарий меняет каталог и затем закрывается, не изменяя вашу текущую оболочку.
Два смягчения:
выполнить . dow, чтобы сценарий выполнялся в контексте текущей оболочки. используйте псевдоним, например, в вашем файле ~ / .bashrc, который изменит каталог - например alias dow="cd /home/myname/Downloads/".Если вы меняете каталог, обычно рекомендуется проверить, что он работал, прежде чем делать другие вещи.
В связанном вопросе есть другие варианты.
Вы написали скрипт, и он работает. Он просто не делает то, что вы хотите, потому что скрипт запускается в отдельной оболочке из оболочки, которая ее вызывает.
Оболочка, выполняемая скриптом, выполняет именно то, что говорит скрипт; он изменяет свою рабочую директорию на ~/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, чтобы сценарий выполнялся в контексте текущей оболочки. используйте псевдоним, например, в вашем файле ~ / .bashrc, который изменит каталог - например alias dow="cd /home/myname/Downloads/".Если вы меняете каталог, обычно рекомендуется проверить, что он работал, прежде чем делать другие вещи.
В связанном вопросе есть другие варианты.
Вы написали скрипт, и он работает. Он просто не делает то, что вы хотите, потому что скрипт запускается в отдельной оболочке из оболочки, которая ее вызывает.
Оболочка, выполняемая скриптом, выполняет именно то, что говорит скрипт; он изменяет свою рабочую директорию на ~/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. Он будет доступен каждый раз при запуске интерактивной оболочки.