我们有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:
原文链接:https://www.f2er.com/bash/387414.html#!/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