Відповіді:
Чи є спосіб це зробити, не вводячи крапку кожен раз? Наприклад команда змінити батьківську оболонку із самого сценарію?
Я не думаю, що існує (крім набору тексту) source somescript.sh , але це, мабуть, не те, що ви шукаєте ^^).
Якщо ви запускаєте скрипт як завжди ./somescript.sh, оболонка розгортає та виконує цю команду. Він передає команду ядру, а потім ядро вирішує, як цю команду виконувати, розбираючи #!рядок всередині сценарію. Потім ядро запускає вказаний інтерпретатор (у цьому випадку, мабуть, bashпідпакет). Для цього модифікаціїsomescript.sh навколишнього середовища виділяються в нижній частині корпусу, не впливаючи на батьківську оболонку.
Якщо ви хочете, щоб оболонка читала сам скрипт, не запускаючи інший процес, вам явно потрібно повідомити його, використовуючи .або 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це робиться.