【问题标题】:How Can I Execute Environment Variables in Shell Script? [duplicate]如何在 Shell 脚本中执行环境变量? [复制]
【发布时间】:2020-10-21 08:27:21
【问题描述】:

我有 2 个文件。 一种是名为 envlist 的列表文件。 另一种是名为test的shell脚本文件。

envlist(列表文件)中,环境变量列表如下;

setup_top
CFG

那些已经被声明为环境变量。

(所以当我在命令中输入 cd $setup_topcd $CFG 时,效果很好)

test(shell脚本)中,有如下代码;

#!/bin/bash

dir=$(<$env/envlist)     # $env is another environment variable I declared.
for i in ${dir[*]}
do
     cd $i               # I think this line is a matter.
     echo "------------------"
     sleep 2
done

当我执行这个 shell 脚本时,我得到了如下错误;

./test: line 6: cd: setup_top: No such file or directory
----------------------------
./test: line 6: cd: CFG: No such file or directory
----------------------------

逐行读取 envlist 文件似乎效果很好,但 cd 命令似乎不起作用。

如何修复 shell 脚本代码以正常工作?

【问题讨论】:

  • 如果setup_topCFG 是相对路径,则需要在循环末尾包含cd ..

标签: bash shell


【解决方案1】:

其实需要将$i转化为变量名,然后读取$varname。如果 shell 支持这个,你应该写cd $$i。不幸的是,这不起作用,因为$$ 给出了当前的 PID。

正如@Biffen 所建议的,您应该使用 shell 变量替换:

cd ${!i}

上一个答案,使用危险的eval 指令:

eval cd \$$i

注意:eval 是一个危险指令。仅当您确定文件的内容(不是不受信任的用户提供的文件)时才使用它。

【讨论】:

  • 感谢 Veyret 回答我。你给了我两个答案。不幸的是,换行后我得到了同样的错误答案。我从终端得到的只有两个“------------”。
  • 当我尝试 Bourne-Again Shell Script,ASCII 文本可执行文件时,它失败了。但是当我尝试 Bourne-Again Shell Script,UTF-8 unicode 文本可执行文件时,它起作用了!!!谢谢!!!!
  • @SatthewSeongHunMoon 你还能期待什么?! cd 不打印任何内容。
  • 不,我想说的是,当我执行该行时,它应该被移动到 $setup_top 或 $CFG。但它根本不动
  • @SatthewSeongHunMoon 你是如何验证的?您无法“看到”工作目录的变化。
猜你喜欢
  • 2020-11-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2010-10-04
相关资源
最近更新 更多