我刚签了一份新合同,遇到了一个我以前从未遇到过的问题。
他们的 Oracle 数据库是在 korn shell 下启动的。
oracle:x:500:100:Oracle user:/home/oracle:/usr/bin/ksh
我有我所有的 bash 脚本,没有测试环境,只是喜欢日常使用的 bash。
我曾尝试从 .profile 调用 bash,但是当脚本需要环境变量并且启动另一个 shell 时,这会变得很混乱。
我可以简单地编辑 /etc/passwd 并在登录时启动 bash shell 而不会影响正在运行的进程吗?
数据库本身可能不会经常使用登录 shell。
登录 shell 不限制您
bash
用于编写脚本。脚本中的#!
-line 告诉 shell 使用什么解释器来运行脚本,这可以是bash
orksh
或python
orperl
或任何适合特定脚本的内容。唯一不同的是,当您以
oracle
用户身份登录时,登录 shell 是什么,以及可能使用登录 shell 的其他任何地方(您应该阅读 Oracle 数据库的手册以了解它可能在哪里,但是据我所见,ksh
,bash
和csh
都支持)。bash
就个人而言,我会避免更改登录 shell,而是从命令行手动启动一个交互式shell,如果这是您希望以oracle
用户身份进行交互工作的 shell。我建议创建一个个人 unix 帐户以供经常使用(在哪里可以使用 bash),并且只在需要时使用 oracle 帐户;这将帮助您避免因更改帐户而可能带来的任何意外(或使 Oracle 可能向您发送有关如何做事的文档无效)。如果您更改外壳,它可能不会破坏正在运行的进程,它可能会导致意外。
对于您可能想做的大部分 DDL/DML 工作,您不需要成为 oracle 用户;您可以使用您的个人帐户。
要准确回答这个问题:当然,您可以在不影响当前进程的情况下更改 oracle 的 shell 。不过,我建议
chsh
不要编辑 /etc/passwd。考虑期望在 ksh 中作为 oracle 运行的 cron(或其他计划的)作业。还要考虑从期望运行 ksh 作为其登录 shell 的现有进程产生的任何作业。
快速阅读适用于 Linux x86-64 的 Oracle® 数据库快速安装指南 11g 第 1 版 (11.1)表明对 ksh 以外的 shell 有一些支持,但您需要相应地设置所需的 shell 配置文件。
在进行此类更改后,我会回收应用程序,以确保您得到一切。
设置 ~/.bashrc 和/或 ~/.bash_profile 可能更容易,然后
exec bash
在交互工作时键入。