如何使用bash在文本文件中执行命令替换。是否有任何命令可以像此处文档一样处理文本文件(可能的字符串)?
# export NAME=John
# cat <<'EOF' > template
Hello, ${NAME}
Date: $(date)
EOF
# some-magic < template
Hello, ${NAME}
Date: Fri 02 Aug 2019 04:01:48 PM CEST
我知道,envsubst
执行变量替换,但不执行命令替换。
# envsubst < template
Hello, John
Date: $(date)
预期的输出类似于此处没有扩展NAME
的文档行为。
# export NAME=John
# cat <<EOF
Hello, ${NAME}
Date: $(date)
EOF
Hello, John
Date: Fri 02 Aug 2019 04:01:48 PM CEST
谢谢, 扬
答案 0 :(得分:0)
这可能会达到目的:
echo -e "$(eval "echo -e \"`<FILE`\"")"
示例:
$ cat FILE
Using: ${SHELL}
Date: $(date)
$ echo -e "$(eval "echo -e \"`<FILE`\"")"
Using: /bin/bash
Date: Fri Aug 2 10:06:59 PDT 2019
说明:
使用echo -e \"`<FILE`\"
将整个输入文件替换为命令,eval
将其替换(执行命令/变量替换),然后使用命令序列echo
保留原始换行符等。>