linux shell执行perl脚本,无法在Shell脚本中运行Perl脚本
我正在嘗試從* .csh腳本中運(yùn)行perl腳本,但是出現(xiàn)以下錯(cuò)誤:
Can't open perl script"checkLength.perl": No such file or directory
我認(rèn)為這與perl腳本的路徑有關(guān)。 當(dāng)不在shell腳本中調(diào)用perl腳本時(shí),我可以很好地運(yùn)行它,但是當(dāng)我在cshell腳本中調(diào)用它時(shí),不會(huì)運(yùn)行perl腳本。
我用于perl腳本的shebang是:#!/ usr / bin / perl。 我檢查了一下,并且perl位于那里(不在/ usr / bin / env perl中)。 我確保它是可執(zhí)行的。
我是否需要編輯$ PATH才能使其正常工作? 我很困惑,因?yàn)槿绻疫\(yùn)行一個(gè)perl腳本而不在另一個(gè)csh腳本中調(diào)用它,那它就運(yùn)行得很好。
調(diào)用腳本時(shí),請(qǐng)檢查當(dāng)前的工作目錄。
checkLength.perl相對(duì)于.csh腳本的路徑是什么?
嗯,我不 我怎么會(huì)發(fā)現(xiàn)呢?
嗯,我在調(diào)用腳本之前檢查了工作目錄,并在perl腳本實(shí)際所在的位置之前的一個(gè)目錄中搜索了perl腳本。 如果我將perl腳本的路徑編輯為實(shí)際路徑,那應(yīng)該可以解決此問(wèn)題,對(duì)嗎?
是的,就這樣,假設(shè)您發(fā)現(xiàn)了有關(guān)pwd的信息。 Perlscripts通常具有后綴.pl。
是的,我從前就知道pwd,只是從沒(méi)想過(guò)要在perl腳本運(yùn)行之前就使用它,只是要檢查Im是否在正確的目錄中。 非常感謝隊(duì)友!
@nlu:請(qǐng)編寫解決方案,以便OP可以接受
當(dāng)然,針對(duì)您的問(wèn)題的一個(gè)明顯解決方案是僅使用腳本的完整路徑。但這通常不是可取的,因?yàn)槟_本會(huì)在無(wú)法完全反映原始結(jié)構(gòu)的安裝上制動(dòng)。
因此,有兩種可能性:
您可以將perl腳本放入PATH變量中包含的定義明確的位置,以便在各自用戶環(huán)境下運(yùn)行的任何程序都可以找到它。
或者,相對(duì)于調(diào)用腳本的位置,您有一些定義明確的位置。假設(shè)您的bash腳本位于somedir中,而perl腳本位于somedir / subdir中,那么您的調(diào)用將是subdir / perlscript.pl。然后,要獨(dú)立于調(diào)用者工作目錄中的可能更改,您可以確定bash腳本啟動(dòng)時(shí)要調(diào)用的perl腳本的當(dāng)前完整路徑。
一個(gè)模板是:
#!/bin/bash
FULLPATH=$(pwd)/subdir/somescript.pl
# do something else, cd ...
$FULLPATH
我假設(shè)您的Perl腳本相對(duì)于bash腳本保持在固定路徑中。假設(shè)您的目錄結(jié)構(gòu)如下所示:
(BASEDIR)/bin/example.sh
(BASEDIR)/perl/example.pl
為了允許您從系統(tǒng)中的任何位置運(yùn)行bash腳本,必須通過(guò)獲取BASEDIR來(lái)指定Perl腳本的相對(duì)路徑。
#!/bin/bash
BASEDIR=$(dirname $0)
perl $BASEDIR/../perl/example.pl
上面我們正在做的是找到您調(diào)用的bash腳本(BASEDIR / bin)的位置,然后使用bash腳本的位置作為參考來(lái)找到Perl腳本的相對(duì)位置。現(xiàn)在,您將可以在任何地方調(diào)用bash腳本并正常運(yùn)行Perl腳本。
總結(jié)
以上是生活随笔為你收集整理的linux shell执行perl脚本,无法在Shell脚本中运行Perl脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [html] html如何创建图片热区
- 下一篇: linux运行perl脚本,linux运