如何在bash中引用一个csh脚本来设置环境

前端之家收集整理的这篇文章主要介绍了如何在bash中引用一个csh脚本来设置环境前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有Oracle在Solaris上运行,shell是默认的csh。所以登录脚本也会在csh中设置oracle_home,oracle_sid。但是我不喜欢csh,想用bash来做我的工作。那么如何在bash中获取csh登录脚本?

例如,以下是.cshrc文件中的内容。当使用bash时,我想使用这些变量。一种方法是再次复制变量并使用bash命令,例如导出ORACLE_SID = TEST。但这样做将需要我们维护两个文件副本。当我们更改数据库名称升级数据库时,我需要单独维护bash登录文件。很高兴使用类似的东西

来源.cshr在bash,但它不工作。

setenv ORACLE_SID TEST
setenv ORACLE_HOME /oracle/TEST/home/products/10204
setenv EPC_DISABLED TRUE
setenv MANPATH /usr/local/man:/usr/share/man
setenv EDITOR vi
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/sfw/lib/64
setenv NLS_LANG AMERICAN_AMERICA.UTF8
setenv NLS_DATE_FORMAT "DD-MON-RR"
在〜/ .bashrc(或〜/ .bash_profile,〜/ .bash_login和〜/ .profile中存在的第一个)使用类似的东西来源代码。 〜/斌/ 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

这个版本消除了evil 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
原文链接:https://www.f2er.com/bash/387414.html

猜你在找的Bash相关文章