我已經通過一些教程看,但我仍然無法找出我做錯了..我想下面的代碼(在Perl的特等文件,作爲一個可執行文件):如何正確運行Perl「單行」命令行腳本?
#!/usr/bin/perl
perl -e 'print "Hello";'
我運行此腳本,並得到:
/home/user1/Desktop/file_backups.pl的執行中止由於編譯錯誤。
(我是新來使用Perl調用Linux命令行。)
我已經通過一些教程看,但我仍然無法找出我做錯了..我想下面的代碼(在Perl的特等文件,作爲一個可執行文件):如何正確運行Perl「單行」命令行腳本?
#!/usr/bin/perl
perl -e 'print "Hello";'
我運行此腳本,並得到:
/home/user1/Desktop/file_backups.pl的執行中止由於編譯錯誤。
(我是新來使用Perl調用Linux命令行。)
perl
不是一個Perl腳本中一個有效的命令。如果你已經將該文件命名爲.sh腳本,並且在shebang行上使用了#!/bin/bash
,那麼它就可以工作,但編寫一個僅用於調用Perl的bash文件並沒有多大意義(爲什麼不調用Perl直接?)
既然你提到你想要與命令行進行交互,我會在這裏提到你可以通過@ARGV
數組獲得Perl內的命令行選項。 (見perldoc perlvar)
嘗試:
#!/usr/bin/perl
# This is a comment ~~~
# This script will be run as a Perl script
# since 'perl' isn't a keyword or function in Perl
# something like this must fail:
#
# perl -e 'print "Hello";'
#
# The following should work.
print "Hello"; print " World\n";
或者,如果你希望你的shell腳本來執行Perl代碼:
#!/bin/sh
# That's a Bash script ~~~
# It's just a command line in a file ...
perl -e 'print "Hello World";'
背景:#!
是interpreter directive。
當命令執行時,它被轉換爲執行解釋器。
你可能會試圖做到這一點:
system("/usr/bin/perl -e 'print \"Hello!\\\\n\";'");
感謝您的回覆..以及我想要做的是編寫perl腳本,與命令行進行交互,我想我已經倒過來了,因爲我正在看的是bash/shell腳本來調用perl – Rick 2010-07-10 17:47:47
這只是不好的建議。 OP想要在Perl腳本中打印hello。所以只需使用打印。 – ghostdog74 2010-07-10 17:49:00
@ghostdog:我沒有試圖提出這個建議,它只是一個直接問題的答案。我試圖不去判斷。看起來他正在尋找相反的東西,無論如何,所以我們都沒有了。 :-) – eruciform 2010-07-10 17:55:14
既然你說你要找的相反,這可能是你的意思:
# vi stdin.pl
# cat stdin.pl
#!/usr/bin/perl
while(<STDIN>)
{
if(/^hello/){ print "Hello back to ya!\n"; }
}
# chmod 0777 stdin.pl
# ./stdin.pl
foo
hello
Hello back to ya!
#
只需鍵入
perl -e 'print "Hello World\n";'
這隻對真的很棒。長一些的腳本需要自己的文件...
假設你有以下輸入:
$ for i in a b c ; do echo "$i is $i" > $i; done $ cat a b c a is a b is b c is c
大家都知道大寫字母是多更好!
perl -i.bak -pe '$_ = uc' a b c
所以現在
$ cat a b c A IS A B IS B C IS C
但我們真的很想能在這個命令叫upcase
,這是很容易做到!
#! /usr/bin/perl -pi.bak
$_ = uc
在看到它的工作:
$ for i in a b c ; do echo "$i is $i" > $i; done $ cat a b c a is a b is b c is c $ ./upcase a b c $ !cat cat a b c A IS A B IS B C IS C
從answer to a similar question更多提示:
的
-e
選項引入了被執行,其中Perl代碼你可能會想,作爲一個腳本命令行 - 所以放下它並將代碼粘貼到主體中。留在012b在shebang(#!
)行。一般來說,最安全的做法是堅持最多一個「叢」選項。如果你需要更多的東西,你可以在
BEGIN {}
塊中扔掉它們的等價物。不要忘記打開執行位!
chmod +x script-name
因爲你沒有給你想要轉換的實際一行代碼,我不得不放棄一個廣泛的,普遍的答案。如果您編輯問題以使其具體針對您想要執行的操作,我們可以提供更有幫助的答案。
這應該工作。雙引號內部單引號;)
perl -e "print 'Hello'"
我很抱歉重振這篇舊文章,但我在哪裏可以查看選項的含義? (即你的「-e」)謝謝 – Sosi 2014-10-30 10:49:45
@Sosi「man perl」 – 2016-01-15 06:47:38
你的意思是讓Perl調用linux(shell)命令行,或者讓shell調用Perl? – Ether 2010-07-10 18:06:07