【问题标题】:executing a ksh script does not inherit environment variables执行 ksh 脚本不会继承环境变量
【发布时间】:2021-03-23 13:41:41
【问题描述】:

我正在尝试运行一个简单的 shell (Centos 7) 来打印系统 HOSTNAME 变量:

test.sh

#!/bin/ksh
echo "HOSTNAME:"$HOSTNAME

当从 bash 或 ksh 执行时,shell 无法按预期工作

>ksh ./test.sh ----> HOSTNAME is unset
>./test.sh ----> HOSTNAME is unset

如果我创建一个声明和导出 HOSTNAME 的 ~/.profile,则没有任何变化。 如果我创建一个 ~./kshrc,那么该源 ~./profile 只有在我从 bash 切换到 ksh 并执行脚本时才有效。

如果我从 bash 运行以下代码,由于交互模式,它确实可以工作

ksh -xi ./test.sh

+ command . ./.profile
+ HOSTNAME=<MYNAME>
+ export HOSTNAME
+ export HOSTNAME
+ echo HOSTNAME:<MYNAME>
HOSTNAME:<MYNAME>

没有交互模式 ~/.profile 没有加载

+ echo HOSTNAME:
HOSTNAME:

由于一堆使用 HOSTNAME 变量的脚本,即使在 ksh 中我也需要设置原始 HOSTNAME

PS:我已经尝试打印 PATH 变量,即使 HOSTNAME 没有,它也能正常工作

你能给我一些建议吗?

【问题讨论】:

  • 您需要export HOSTNAME。这几乎可以肯定是重复的。
  • 你的.kshrc 几乎肯定不是.bashrc 的来源。如果您想共享设置,请将它们放入 .profile - 并确保您不使用任何 Bash 或 Ksh 语法 - 然后在必要时从特定于 shell 的启动文件中使用 source。 (例如,如果 .bash_profile 两者都存在,则 Bash 更喜欢 .profile;前者通常应该是 source 后者。)
  • 如果变量已经是exported,则有东西正在替换它的值。如果这是您的私有变量,请不要使用大写,因为这与系统变量冲突。另见stackoverflow.com/questions/673055/…
  • 无法访问您的启动文件,这是不得不说的。阅读ksh 手册页和/或试验其调试选项(猜测ksh -xi;不在我可以测试的地方)。
  • .profile vs .bashrc 可能与您的问题无关,但是对于不是特定于 Bash 的内容重载 .bashrc 通常是有问题的。 .profile 文件正是用于此目的。

标签: bash shell environment-variables centos7 ksh


【解决方案1】:

当我放

HOSTNAME=$(cat /etc/hostname)
export HOSTNAME

在我的 .kshrc 中 - 如果你没有它,创建它,我得到了这个工作并且能够

echo $HOSTNAME
server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多