В вашем ~ / .bashrc
(или в первом из ~ / .bash_profile
, ~ /.bash_login
и ~ / .profile
, который существует) исходят из этого сценария, используя что-то вроде . ~ / bin / sourcecsh
:
#!/bin/bash
# This should be sourced rather than executed
while read cmd var val
do
if [[ $cmd == "setenv" ]]
then
eval "export $var=$val"
fi
done < ~/.cshrc
Эта версия устраняет злой eval
:
#!/bin/bash
# This should be sourced rather than executed
# yes, it will be sourcing within sourcing - what so(u)rcery!
source /dev/stdin < \
<(
while read cmd var val
do
if [[ $cmd == "setenv" ]]
then
echo "export $var=$val"
fi
done < cshrc
)
Редактировать:
Без исходного ввода stdin:
while read cmd var val
do
if [[ $cmd == "setenv" ]]
then
declare -x "$var=$val"
fi
done < cshrc
Поиск файла csh в bash не работает.Вы можете изменить оболочку входа по умолчанию с csh на bash, если вам удобнее работать с bash. Вы можете использовать chsh или как администратор, чтобы изменить его за вас.
chsh -s /usr/local/bin/bash
Единственный способ, который я могу придумать, - это загрузить csh, а затем вызвать bash из этой новой оболочки. Таким образом csh сможет проанализировать этот файл, а затем созданный им bash унаследует эту среду.
В вашем bash .profile
вы можете сделать следующее:
cat .cshrc | sed 's/setenv\s+(\S+)\s+(.*)$/set $1=$2; export $1/' > $HOME/.env_from_csh
source $HOME/.env_from_csh