簡體   English   中英

如何使用 Perl 獲取 bash 內置命令

[英]How to get bash built in commands using Perl

我想知道是否有辦法使用 perl 腳本獲取 Linux 命令。 我說的是諸如cd ls ll clear cp之類的命令

您可以通過多種方式執行系統命令,其中一些方式比其他方式更好。

  • 使用system(); ,它會打印命令的 output,但不會將 output 返回到 Perl 腳本。
  • 使用反引號 (``),它不打印任何內容,但將 output 返回到 Perl 腳本。 使用實際反引號的另一種方法是使用qx(); function,它更容易閱讀並完成同樣的事情。
  • 使用exec(); ,與system(); ,但根本不會返回到 Perl 腳本,除非該命令不存在或失敗。
  • 使用open(); ,它允許您將 pipe 從腳本輸入到命令,或者將命令的 output 讀取到腳本中。

重要的是要提到您列出的系統命令,如cpls使用 Perl 本身的內置函數可以更好地完成。 任何系統調用都是一個緩慢的過程,所以當想要的結果很簡單時使用本機函數,比如復制文件。

一些例子:

# Prints the output. Don't do this.
system("ls");

# Saves the output to a variable. Don't do this.
$lsResults = `ls`;

# Something like this is more useful.
system("imgcvt", "-f", "sgi", "-t", "tiff", "Image.sgi", "NewImage.tiff");

本頁更詳細地解釋了您可以進行系統調用的不同方式。

正如 voithos 所說,您可以使用system()或反引號。 但是,請考慮到不建議這樣做,例如, cd將不起作用(實際上不會更改目錄)。 請注意,這些命令在的 shell 中執行,不會影響正在運行的 perl 腳本。

我不會依賴這些命令並嘗試在 Perl 中實現您的腳本(如果您決定使用 Perl,無論如何)。 事實上,Perl 最初被設計為系統管理員的 sh 和其他 UNIX shell 的強大替代品。

問題是 perl 正在嘗試執行 bash 內置(即source ,...),就好像它們是真實文件一樣,但是 perl 找不到它們,因為它們不存在。 答案是告訴 perl 明確執行什么。 對於source之類的內置函數,請執行以下操作,它工作得很好。

my $XYZZY=`bash -c "source SOME-FILE; DO_SOMETHING_ELSE; ..."`;

對於cd的情況,請執行以下操作。

my $LOCATION=`bash -c "cd /etc/init.d; pwd"`;

你可以用反引號包圍命令
`命令`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM