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