对于所有命令,如何在heredoc中进行子shell扩展?
例如:
file=report_$(date +%Y%m%d)
cat <<EOF > $file
date
hostname
echo 'End of Report'
EOF
这样可以评估所有命令吗?
我知道
file=report_$(date +%Y%m%d)
cat <<EOF > $file
$(date))
$(hostname)
$(echo 'End of Report')
EOF
可以工作,但默认情况下有没有办法指定子shell?
答案 0 :(得分:7)
您可以使用sh
(或bash
)作为命令,而不是cat
;实际上它将作为shell脚本运行:
sh <<EOF > $file
date
hostname
echo 'End of Report'
EOF
答案 1 :(得分:1)
如果你想将所有行扩展为命令,那么heredoc就没用了:
file="report_$(date +%Y%m%d)"
{
date
hostname
echo 'End of Report'
} >| "$file"
您也可以像这样重定向1>
:
file="report_$(date +%Y%m%d)"
exec 1> "$file"
date
hostname
echo 'End of Report'
答案 2 :(得分:0)
不是那样,但是:
cat << EOF | sh > $file
date
hostname
echo 'End of Report'
EOF
会达到同样的效果。 (请注意,如果需要,这是一个新的sh
命令 - 使用bash
,而不是当前shell的子shell,因此它没有设置相同的变量。)
(编辑:我没有注意到这也是一个UUOC:无用的猫;见爆炸药丸的答案。:-))