2

我有两个 shell 脚本文件test1.sh 和 test2.sh。我有另一个名为translogs.txt的文件。
现在我需要将 test1.sh 中的两个变量的值复制到 translog.txt 中,并且需要将相同的变量复制到test2.sh中的相应值中。

测试1.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
echo -e "$ONE\n$TIME">translog.txt;

translog.txt

ONE="000012"
TIME="2013-02-19 15:31:06"

但是在test2.sh中,我想要与 translog.txt 中相同的值到相应的变量

测试2.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
4

4 回答 4

3

1 干溶液

$> cat translog.txt
ONE="000012"
TIME="2013-02-19 15:31:06"

使用perl正则表达式可以使用后向grep运算符匹配这些值 。

$> grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt
"000012"

对于TIME

$> grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt
"2013-02-19 15:31:06"

因此,从test2.sh使用脚本开始,您可以像这样使用它:

#!/bin/bash
ONE=`grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt`
TIME=`grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt`

2 命令行解决方案

以下链接中指出的另一种解决方案是使用:source(aka .) 命令将文件中的所有变量加载到当前 shell 中:

$ source translog.txt

现在您可以访问文件中定义的变量的值:

$ echo $TIME
"2013-02-19 15:31:06"

3 最简单​​的解决方案

@user2086768 提到了另一种方法。将这些行放入`test2.sh:

#!/bin/bash
eval $(cat translog.txt)

因此,您将在test2.sh脚本中分配两个变量:

ONE="000012"
TIME="2013-02-19 15:31:06"

您可以轻松检查是否添加:

echo $ONE
echo $TIME

还要检查这些链接:

于 2013-02-19T11:10:38.903 回答
1

作为translog.txt有效的 bash 代码,您可以执行以下操作:

source translog.txt

在 中test2.shONE并且TWO将在 中可用test2.sh

警告一句,如果 和 的值来自不受信任的来源,这确实会使您面临 shell 脚本注入ONE攻击TWO

于 2013-02-19T11:18:24.770 回答
0

eval 应该适合你。

尝试使用这个版本的 test2.sh:

测试2.sh

#!/bin/bash
eval $(cat translog.txt)
echo $ONE
echo $TIME

这输出:

000012

2013-02-19 15:31:06

于 2013-02-19T11:38:02.383 回答
0

如果您的 translog.txt 如您所说,那么这将起作用

#!/bin/sh
while read aa
do
  eval "$aa"
done < translog.txt
于 2013-02-19T11:15:29.130 回答