从csh脚本调用Perl程序失败:报here: Command not found错误求助
问题分析与解决建议
这个问题我太熟了,我来给你拆解一下原因和解决办法!
错误根源
你在csh脚本里用了反引号perl a.pl,这在shell里是命令替换的语法——它会先执行perl脚本,然后把脚本的输出内容当作新的shell命令去执行。你的a.pl里print "here.\n",所以csh拿到这个输出后,就会尝试去运行here这个命令,而系统里根本没有这个命令,自然就报“here: Command not found”了。
解决办法
办法1:直接运行Perl脚本(最常用场景)
如果你只是想执行a.pl,不需要把它的输出当成命令来跑,那直接去掉反引号就行,修改后的a.csh如下:
#! /bin/csh -f perl a.pl
这样运行a.csh的时候,csh会直接调用perl去执行a.pl,脚本的输出会直接打印到终端,不会被当作命令执行。
办法2:如果需要处理Perl脚本的输出
如果你是想把a.pl的输出保存到变量或者做其他处理,而不是直接执行它,那可以用变量赋值:
#! /bin/csh -f set perl_output = `perl a.pl` echo "Perl脚本的输出是:$perl_output"
这样就会把a.pl的输出存到perl_output变量里,而不是当作命令跑。
额外优化:让Perl脚本可以直接执行
你的a.pl开头的代码有点小问题,正确的“shebang”写法应该是用来指定解释器的,修正后的a.pl可以改成这样:
#!/usr/bin/env perl -w use Cwd; print "here.\n";
然后给a.pl加执行权限:
chmod +x a.pl
之后在csh脚本里就可以直接写./a.pl来运行它了,不需要再显式调用perl命令。
内容的提问来源于stack exchange,提问作者Rocky Zheng
相关产品推荐
相关产品推荐

