Сорсинг файла в новой оболочке tcsh и получение псевдонимов для работы - PullRequest
0 голосов
/ 10 января 2019

Я хотел бы получить файл в новой оболочке tcsh.

Я могу запустить:

#!/usr/bin/env tcsh
konsole --close -e tcsh -exec "ls -l;exec tcsh"

Это откроет новую консоль, выведет список всех файлов и обеспечит интерактивность оболочки.

Однако, когда я пытаюсь:

#!/usr/bin/env tcsh
konsole --close -e tcsh -exec "source /tmp/1234.sh;exec tcsh"

Я получаю все переменные env, но не псевдонимы.

Например: В /tmp/1234.sh: у меня есть:

...
setenv MAYA "/maya/path";
alias may 'source /X/tools/binlinux/myscript.tcsh getDirectory ${MAYA} \!*';
...

Теперь в моей новой оболочке:

$env | grep 'MAYA'

выведет правильную среду "MAYA" но:

$may

может: Команда не найдена.

Все псевдонимы не работают

Если я выполню:

$source /tmp/1234.sh

в новой оболочке, тогда все псевдонимы будут работать нормально.

Обратите внимание, что я не могу сохранить данные в каком-либо файле, например .tchrc, или изменить формат файла /tmp/1234.sh.

Как заставить псевдонимы работать в новой оболочке?

1 Ответ

0 голосов
/ 10 января 2019

exec заменяет текущий процесс новым. Команда source выполняется в старом процессе, и новый процесс не наследует его состояние (кроме переменных среды).

Самый простой способ сделать то, что вы хотите, это установить переменную окружения и изменить ее поведение в файле tcshrc; e.g.:

#!/bin/sh
export FOO=bar
konsole --close -e tcsh

А потом в вашем tcshrc ответьте на это:

if ( $?FOO ) then
    setenv MAYA "/maya/path";
    alias may 'source /X/tools/binlinux/myscript.tcsh getDirectory ${MAYA} \!*';
endif

Нет реального способа сообщить tcsh, что он читает конфигурацию из другого места. Однажды я отправил патч для этого, но он был отклонен.

...