【问题标题】:UNIX : Unable to get value of env variableUNIX:无法获取环境变量的值
【发布时间】:2013-12-16 14:42:06
【问题描述】:

我正在对服务器执行 remsh 并在 for 循环中读取文件的内容。文件包含目录的路径,其名称包含环境变量。

文件内容如下。 ENV_VARIABLE 包含某个目录的路径。

    $ENV_VARIABLE/somepath

我正在运行如下命令。

    remsh server -l user ' . ./.profile;echo $ENV_VARIABLE for i in `cat filename do; echo $i;done'

执行上述命令时,会产生以下输出。

    VALUE_OF_ENV_VARIABLE/somepath
    $ENV_VARIABLE/somepath

为什么从文件中读取的 ENV_VARIABLE 没有被它的值替换,而相同的 ENV_VARIABLE 被它的值替换为 'echo' ?

如何从文件中读取 ENV_VARIABLE 的值?

【问题讨论】:

  • 远程 ./.profile 中是否为 ENV_VARIABLE?或在调用服务器之一(即本地)?如果远程:remsh server -l user '. ./.profile ; echo "ENV_VARIABLE=$ENV_VARIABLE" ; for i in $(cat filename) ; do echo "$i" ; done'。如果在本地:remsh server -l user ". ./.profile ; echo 'ENV_VARIABLE=$ENV_VARIABLE' ; for i in $(cat filename) ; do echo \"\$i\" ; done"(我假设“文件名”和“.profile”都是远程的)
  • 是的,它是在远程服务器上定义的,我可以通过运行 remsh server -l user ' 使用 echo $ENV_VARIABLE 打印它的值。 ./.profile;echo $ENV_VARIABLE'。但是当我尝试通过从文件中读取它来打印它的值时,它给了我 ENV_VARIABLE 而不是它的值。

标签: unix environment-variables


【解决方案1】:

阅读您的 cmets 后,很明显问题出在 cat filename,它只会生成文件的原始内容而无需插值。如果要进行变量替换,则需要在该输出上使用 eval

所以,我认为你想要的是:

remsh server -l user ' . ./.profile;echo $ENV_VARIABLE; for i in `cat filename` ; do eval echo $i ; done'

在使用从文件中获取的变量之前注意eval

【讨论】:

  • 它在远程 shell 中定义,我可以通过 echo $ENV_VARIABLE 打印它的值。文件也包含相同的变量,但是当我尝试通过 echo 打印它的值时,它给了我 ENV_VARIABLE 而不是它的值。
  • 因为您只是使用cat 来输出文件,所以这不会插入变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
相关资源
最近更新 更多