Ответы:
Есть ли способ сделать это, не набирая точку каждый раз? Например команда для перехода на родительскую оболочку из самого скрипта?
Я не думаю, что есть (кроме ввода 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происходит.