如何在ksh脚本中从文件中读取的字符串中扩展宏?



我想读取存储在文件中的文件名列表,而顶层目录是一个宏,因为这是用于可能在多个环境中运行的脚本。例如,有一个文件file_list.txt包含以下完全限定的文件路径:

$TOP_DIR/subdir_a/subdir_b/file_1
$TOP_DIR/subdir_x/subdir_y/subdir_z/file_2 

在我的脚本中,我想tar文件,但为了做到这一点,tar必须知道实际路径。我如何获得包含文件路径的字符串来扩展宏以获得实际路径?在下面的代码中,回显的字符串值与上面的文件中完全相同。我尝试使用actual_file_path= ' eval $file_path ',而eval确实评估宏,它返回一个状态,而不是评估的路径。

for file_path in `cat $input_file_list`
do
echo "$file_path"
done

标签ksh我认为你没有实用程序envsubst.
$input_file_list中的变量数量非常有限时,你可以用awk代替变量:

awk -v top_dir="${TOP_DIR}" '{ sub(/$TOP_DIR/, top_dir); print}' "${input_file_list}"

我错误地使用了eval。解决方案是在eval的右侧使用如下赋值:

for file_path in `cat $input_file_list`
do
eval myfile=$file_name
echo "myfile = $myfile"
done

$myfile现在有了宏的实际扩展。

相关内容

  • 没有找到相关文章

最新更新