来自 shell 脚本的源 .bash_profile 不成功

0 bash oracle

通常,我可以使用此命令将 ~/.bash_profile 文件作为 oracle 源,但是当我为另一个实例创建一个名为 test 的新文件时。

\n
#!/bin/bash\n\n# User specific environment and startup programs\n# Oracle Settings\n\n# User specific environment and startup programs\nif ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]\nthen\n    PATH="$HOME/.local/bin:$HOME/bin:$PATH"\nfi\n#export PATH\n\n# Oracle Settings\n\nexport ORACLE_BASE=/opt/oracle\nexport ORACLE_HOME=/opt/oracle/product/21c/dbhome_1\nexport ORACLE_SID=agile\nexport ORA_INVENTORY=/opt/app/oraInventory\nexport PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch\n\nexport DISPLAY="localhost:10.0"\nexport LC_ALL=C\n\nalias sp='sqlplus / as sysdba'\nalias script='cd /u02/scripts/agile'\nalias software='cd /u02/software'\nalias export='cd /u02/backup/export'\n
Run Code Online (Sandbox Code Playgroud)\n

当我在 shell 脚本中获取它并执行它时,它会抛出 cd 错误:参数太多。我试过 。(点)而不是来源。相同的结果。

\n
$ source test\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n
Run Code Online (Sandbox Code Playgroud)\n

当我给出“test”$ chmod a+x ~/test并获取它时,我收到字符集错误:

\n
$ ls -ltr test\n-rwxr-xr-x. 1 oracle oinstall 724 Oct  6 14:37 test\n$ souce test\nGLib: Cannot convert message: Could not open converter from \xe2\x80\x9cUTF-8\xe2\x80\x9d to \xe2\x80\x9cAL32UTF8\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n

在测试文件上添加了 export CHARSET=AL32UTF8 并获取它,我得到了与开始相同的错误:

\n
$ vi test\n$ source test\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n
Run Code Online (Sandbox Code Playgroud)\n

即使我获取了主要的资源,但是当从 root 启动 su - oracle 时就可以了。

\n
$ source .bash_profile\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n-bash: cd: too many arguments\n
Run Code Online (Sandbox Code Playgroud)\n

以 root 身份获取时不会出现错误

\n
[root@ ~]# source ~oracle/test\n
Run Code Online (Sandbox Code Playgroud)\n

ste*_*ver 14

问题几乎肯定是您不幸选择了别名名称export='cd /u02/backup/export'- 这会覆盖同名的 shell 内置命令。

特别是,如果您在同一个 shell 中第二次获取脚本,则会产生如下表达式:

export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
Run Code Online (Sandbox Code Playgroud)

变得

cd /u02/backup/export ORACLE_BASE=/opt/oracle
cd /u02/backup/export ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
Run Code Online (Sandbox Code Playgroud)

其中cd传递了“太多参数”。

当我打开终端时,请参阅 /usr/share/bash-completion/bash-completion 中有些相关的源命令错误