【问题标题】:What environment variables are available while starting the script using init.d boot process?使用 init.d 启动过程启动脚本时有哪些环境变量可用?
【发布时间】:2010-04-08 09:37:46
【问题描述】:

我的问题是这样的(操作系统是 Sun Solaris):

  1. 在启动时,我想使用特定脚本启动一个进程。我通过将此脚本放在/etc/init.d 中来做到这一点(并遵循其他 K 和 S 规则)。

  2. 脚本将调用的程序位于$HOME/xxx/yyy位置。

  3. 我使用'su - {myuser} -c "{full path of the program}"' 以{myuser} 身份执行脚本。

  4. 我不想在脚本中硬编码 $HOME 的值,但我只想使用 $HOME 环境变量。如何在 shell 脚本中获取这个 $HOME 环境变量?还有哪些其他变量可供我使用?

【问题讨论】:

  • 一个典型的服务器故障问题。应该搬家,可能有更多合格的答案。
  • 您意识到这是一个安全风险,不是吗?无论如何,su - 应该给你$HOME。如果您尝试su - user -c "echo \$HOME",它会给您正确的结果吗?您的 init.d 脚本不起作用吗?它在做什么/不做什么?您是否尝试过将输出重定向到文件进行调试?

标签: unix shell process boot


【解决方案1】:

随便放

env > env.txt

在脚本中。运行脚本后,env.txt 文件包含所有环境变量。

【讨论】:

    【解决方案2】:

    要获取任何用户的 home 变量,请尝试以下 hack:

    HOME=`sudo -u myuser -s "cd ~; pwd"`
    

    【讨论】:

    • 你也可以试试HOME=getent passwd myuser | cut -d: -f6
    【解决方案3】:

    2) 哪个用户的 $HOME? root 的 $HOME 或 myuser 的 $HOME

    如果是 myuser 的家,只需在子脚本中使用 $HOME,不要在 init.d 脚本中使用它。这将由您正在启动的 shell 进程为您设置。当您执行su - {myuser} 时,您是在指示 su 运行 myuser 的登录 shell(如 /etc/passwd 中所定义)。登录 shell 将根据它是什么 shell 设置默认环境变量。有关详细信息,请参阅 shell 的文档。在 Solaris 上,这可能是 ksh 或 bourne shell。

    3) 做su - myuser -c /usr/bin/env。这将打印出将在子脚本中设置的环境变量。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2013-06-30
      • 2021-01-30
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多