给出这个简单的gmake makefile,标题为makefile.weird:
symlinks :
@ln -s realfile.txt linkfile.txt
这个shell脚本:
ksh -s << EOF
date
gmake -f makefile.weird symlinks
date
echo "This should print some stuff"
EOF
只有第一个&#39;日期&#39;命令打印。 ln命令由gmake运行,但是shell脚本只是在调用gmake后结束,实际上忽略了&#34; here&#34;脚本的文档部分。我以前从未见过这个。任何人都有解释和可能的解决方法?我可以从makefile中删除命令,但是我的好奇心让我紧紧抓住了这个命令。这不重要,但这发生在运行ksh93的AS / 400上,通过他们的PASE系统(在IBMi上运行AIX的方式)。
答案 0 :(得分:2)
gmake
继承了ksh
的标准输入,其标准输入是此处的文档,因此gmake
(或由gmake
调用的内容)正在消耗剩下的用于ksh
的输入。
shell脚本应该只是像
#!/bin/ksh
date
gmake -f makefile.weird symlinks
date
echo "This should print some stuff"
避免了所有内容共享标准输入的问题。
答案 1 :(得分:0)
通过黑客攻击脚本(这是我需要通过'here'文档工作的原因),我提出了两种可能的解决方案:
将gmake扔到后台并在其上调用“wait”
ksh -s << EOF
date
gmake -f makefile.weird symlinks &
wait
date
echo "This should print some stuff"
EOF
将“&lt; / dev / null”添加到gmake命令的末尾。如果您的gmake不需要stdin输入,则此方法有效。
ksh -s << EOF
date
gmake -f makefile.weird symlinks < /dev/null
date
echo "This should print some stuff"
EOF