我不太明白用于运行启动脚本的 shell 环境。它与登录会话有何区别?
如果我设置一个简单的启动脚本来打印环境变量:
metadata
items: - key: startup-script value: ' printenv;'
我会有这样的东西:
Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: OLDPWD=/ Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: PATH=/usr/local/sbin:/usr/local/bin:/usr/ Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: PWD=/opt Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: LANG=en_US.UTF-8 Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: SHLVL=2 Feb 20 15:16:19 gceeuw1lin0003 startup-script[1112]: INFO startup-script: _=/usr/bin/printenv
如果我在 ssh 会话中执行 printenv 命令,我可以看到更多变量,如 HOSTNAME、HOME、SHELL……等等。
我尝试在启动时安装一个软件(专有软件),但由于 $HOME 变量而失败。
Could not expand the path using $HOME
我尝试在软件安装之前在启动脚本中设置 HOME 变量,但是失败了,提示:
invalid command name "wm"
当我尝试使用交互式 shell 进行相同的安装时,一切都运行正常!甚至更好的是,即使我使用以下命令从交互式会话强制重新运行启动脚本,它也能正常工作:
sudo google_metadata_script_runner --script-type startup --debug
我正在寻找对所发生事情的合理解释?为什么它是从交互式 shell 而不是从启动脚本运行的?
知道如何修复这个问题吗?
先感谢您!
答案1
您是否尝试过在自动化选项卡上运行启动脚本?我发现通常不用于此目的,请检查启动脚本 GCE文档以确保您使用的是正确的脚本,如下所示:
#! /bin/bash
printenv