
Я хотел бы получить файл внутри скрипта tcsh. В коде:
#!/bin/tcsh
unsetenv LD_LIBRARY_PATH
source $1
echo $LD_LIBRARY_PATH > temp_file
Ожидаемый результат:Переменная среды, установленная скриптом с помощью команды source, будет выведена во временный файл.
Фактический результат:Исходный файл работает нормально, но LD_LIBRARY_PATH
переменная остается пустой.
Есть идеи, как это реализовать?
ПС tcsh
Конечно, это не мой любимый shell, но у меня на работе есть скрипт, который устанавливает множество переменных окружения, в tcsh
которых я хочу, чтобы они работали bash
. Я решил, что самый простой способ (кроме переписывания tcsh
shell каждый раз) — это создать его источник, вывести переменные в файл и, применив немного магии shell, переместить все обратно в bash.
решение1
Я пробовал с csh на OpenBSD. Думаю, мой пример работает и с tcsh.
Файл test.csh:
#!/bin/csh
source data.csh
echo $VARIABLE
Файл data.csh
#!/bin/csh
setenv VARIABLE 1234
Результат:
$ csh test.csh
1234
решение2
Для справки, это действительно работает, но не следует использовать шебанг для пути tcsh:
#!/bin/tcsh
а лучше используйте путь к 'env':
#!/usr/bin/env tcsh
для обеспечения гибкости в системах с tcsh, установленным в разных путях. Например, если 'tcsh' установлен в '/usr/bin/tcsh', то первый вариант не будет работать, а последний все равно будет работать.