Linux bash - Додайте псевдонім з сценарію без джерела (-ing) сценарію


0

Чи можна написати сценарій схожий

#!/bin/bash
alias foo="bar -options"

і отримати псевдонім, доданий до запущеної оболонки без source (-ing) сценарій

source myscript

буде працювати, але просто

myscript

ні. Псевдонім встановлюється в підгрупі (процесу), але втрачається під час сценарію виходу

Будь-які можливості для зміни аліасу батьківської оболонки без source


Я думаю, що $(echo 'alias foo=bar') підхід (де ви могли б замінити echo з деякою іншою складною командою / сценарієм) інше питання це, мабуть, єдиний інший варіант. Але насправді, source є правильним інструментом для роботи тут. Я не розумію, чому ви так проти цього.
DaoWen

2
Це звучить як проблема XY. Якщо ви поясните, чому ви хочете цього уникнути source Ви можете отримати відповіді, які набагато корисніші.
John1024

@DaoWen - ще раз спасибі, @ John1024 - де XY - я просто запитую "якщо це можливо" - я хотів би уникнути source тому що скрипт, над яким я працюю, має багато функцій через параметри. Тому всі функції викликаються без source і тому я намагаюся звести до мінімуму помилки при використанні сценаріїв. Я не вважаю за краще іноді називати його myscript а іноді source myscript. Так що знову питання: чи можливо це чи ні? Дякуємо за допомогу.
Tom Freudenberg

@DoaWen що не працює: $(echo 'alias foo="bar -option"') - це все ще проблема :-)
Tom Freudenberg

@TomFreudenberg Філософія дизайну unix полягає в тому, що діти повинні ні вміти змінювати середовище батьків / псевдоніми / і т.д. Якщо у вас є псевдоніми, якими ви хочете поділитися між скриптами, не створюючи небажаних частин сценарію, стандартний підхід полягає в тому, щоб помістити ці визначення псевдонімів у окремий файл самостійно, після чого кожен скрипт, який хоче, щоб вони створили цей файл. Окремо хотілося б уточнити твердження: "має багато функцій через -опції". Що мається на увазі під "-особами"?
John1024
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.