2017-05-30 98 views
1

我在Perl腳本中運行shell命令,但它不能按預期工作。我在一個裝有Alpine Linux的容器中作爲我的基本映像。執行shell命令什麼都不產生

我的Perl版本v5.24.0。

perl -e 'my $TEST = `ls -al`; print $TEST' 

這不會打印任何內容,但可以在另一個系統上使用,我在Red Hat Linux上安裝了Perl v5.6.1。

+0

嘗試,如果有一個錯誤:'的perl -e「我的$ TEST ='LS -al';打印$ TEST;打印$?如果$?'' – toolic

+0

@toolic它打印0 – PMat

+0

@Michael ls -al打印目錄的內容,它不是空的 – PMat

回答

5

這是一種可能性,也許是你的問題。

我想你沒有定義PATH env var。

嘗試的ls(如/ bin/LS)本使用完整路徑:

perl -e 'my $TEST = `/bin/ls -al`; print $TEST' 

我測試過類似的情景:

清空PATH:

PATH="" /usr/bin/perl -e' 
    my $output = `ls -al`; 
    if (!defined($output)) { 
     die("readpipe: $!\n")        if $? == -1; 
     die("Child killed by signal ".($? & 0x7F)."\n") if $? & 0x7F; 
     die("Child exited with error ".($? >> 8)."\n") if $? >> 8; 
    } 

    print($output); 
' 

輸出:

readpipe: No such file or directory 

使用絕對路徑(如/ bin/LS):

PATH="" /usr/bin/perl -e' 
     my $output = `/bin/ls -al`; 
     if (!defined($output)) { 
      die("readpipe: $!\n")        if $? == -1; 
      die("Child killed by signal ".($? & 0x7F)."\n") if $? & 0x7F; 
      die("Child exited with error ".($? >> 8)."\n") if $? >> 8; 
     } 

    print($output); 
' 

輸出:看

total 4531444 
drwxr-xr-x 7 rbravo rbravo  4096 May 30 19:40 . 
drwxr-xr-x 63 root root   4096 Apr 7 14:11 .. 
-rw------- 1 rbravo rbravo  12248 May 30 19:39 .bash_history 
... 
+0

它與絕對路徑一起工作。所以這'perl -e'我的$ TEST ='/ bin/ls -al';打印$ TEST''工程。但是我有PATH環境設置正確PATH has/bin – PMat

+0

你可以試試嗎? 'perl -e'我的$ TEST = \'/ usr/bin/env \';打印$ TEST'' – Robert

+0

可打印所有環境變量,並且PATH仍具有/ bin – PMat