我有一个如下所示的文本文件:
的test.txt:
date="2015-01-02"
week="3"
我还有一个shell脚本,它从上面的文本文件中获取变量:
test.sh
#!/bin/sh
source test.txt
echo $week
当我运行./test.sh
时,我收到此错误:
week: command not found
我想我可以在这里遵循这个优雅的解决方案:https://askubuntu.com/questions/367136/how-do-i-read-a-variable-from-a-file
但似乎只适用于bash脚本。
我如何为shell脚本执行此操作?
答案 0 :(得分:1)
我认为你的来源"声明可能有路径问题。 请考虑以下输出:
我添加了一些命令,比如ps -f(为了说服自己它确实在sh中运行,而不是bash)。还有一些回声表明发生了什么。
(作为一个想法,我也尝试用" xyz.txt"而不是" bar.sh",仍然是相同的行为。)
sh-4.1$ ./foo.sh
--- begin ps ---
UID PID PPID C STIME TTY TIME CMD
userabc 3352 3350 0 18:05 pts/0 00:00:00 /bin/bash
userabc 3523 3352 0 18:09 pts/0 00:00:00 sh
userabc 3778 3523 0 18:18 pts/0 00:00:00 /bin/sh ./foo.sh
userabc 3779 3778 0 18:18 pts/0 00:00:00 ps -f
--- end ps ---
Trying just 'bar.sh'
./foo.sh: line 8: source: bar.sh: file not found
week=
date=
Now trying './bar.sh' (note the leading ./ )
week=3
date=2015-01-02
Done.
sh-4.1$
最大的区别是两个源语句;看起来像源需要一个合格的路径。通常我会说。 ./bar.sh 但这或多或少是习惯,因为我总是使用./whatever.sh来调用给定的shell脚本。
测试脚本遵循......
#!/bin/sh
echo --- begin ps ---
ps -f
echo --- end ps ---
echo "Trying just 'bar.sh'"
source bar.sh
echo week=$week
echo date=$date
echo "Now trying './bar.sh' (note the leading ./ )"
source ./bar.sh
echo week=$week
echo date=$date
echo Done.
date="2015-01-02"
week="3"
答案 1 :(得分:1)
你的test.txt很好。
对于test.sh,将其更改为:
#!/bin/bash
source ./test.txt
echo $week
输出是: 3