Ответы:
Есть ли способ сделать это, не набирая точку каждый раз? Например команда для перехода на родительскую оболочку из самого скрипта?
Я не думаю, что есть (кроме ввода source somescript.sh
, но это, вероятно, не то, что вы ищете ^^).
Если вы запускаете скрипт как обычно ./somescript.sh
, то оболочка разветвляется и запускает эту команду. Он передает команду ядру, а затем ядро решает, как выполнить эту команду, анализируя #!
строку внутри скрипта. Затем ядро запускает указанный интерпретатор (в этом случае, вероятно,bash
подоболочка). Поэтому изменения, somescript.sh
вносимые в его среду, изолированы в подоболочке, не затрагивая родительскую оболочку.
Если вы хотите, чтобы оболочка читала сам скрипт, не запуская другой процесс, вы должны явно указать это с помощью ключевого слова .
or source
.
alias
команды, как предложил Скотт.
Если вы выполняете ./somescript.sh
как внешнюю программу, она не может ничего сделать внутри запущенного процесса оболочки, например, получить доступ к неэкспортированным переменным, установить переменные, изменить текущий каталог и т. Д. Обойти это невозможно.
(Ну, ладно, вы можете запустить отладчик из подпроцесса и настроить память родительского процесса. Но если вы попробуете это, наиболее вероятным результатом будет сбой родительской оболочки.)
Вам нужно бежать . ./somescript.sh
. Вы можете скрыть это за псевдонимом или функцией, если хотите, но опять-таки определение псевдонима или функции должно быть сделано в родительской оболочке.
Я думаю, что скрипт, который вы пытаетесь запустить, не исполняемый. chmod a+x somescript.sh
добавит бит выполнения для пользователя, группы и других (ugo) в этот файл. Первая строка файла также будет нуждаться в #! линия сверху, вроде бы #!/bin/bash
.
ls -l somescript.sh
покажет вам триплеты RWX (чтение / запись / выполнение) для файла. Ему понадобится, по крайней мере, первый набор символов, если вы владеете файлом.
export PATH=$PATH:/usr/local/bin
добавление / usr / local / bin в вашу переменную $ PATH, тогда вам нужно найти исходный файл для изменения переменных вашей рабочей среды. Этот вопрос на самом деле «Как программно изменить переменные окружения в моей работающей оболочке из сценария bash?» Сценарий . ./somescript.sh
выполняется просто отлично - вы используете команду dot для поиска в файле. tcsh использует «источник» для того же самого.
export PATH=$PATH:.
Выполнение этой команды в оболочке или добавление ее в файл конфигурации оболочки добавит текущий каталог в переменную PATH. Переменная PATH - это список каталогов, в которых ваша оболочка будет искать исполняемые файлы при выполнении команды.
Это позволит вам запустить любой исполняемый файл в текущем каталоге без ./
.
не о том, ./
что является частью имени файла. Запуск ./somescript не выполняет его в текущей оболочке, как это . ./somescript
происходит.