2011-03-04 34 views
5

Bu saatlerce beni deli ediyor.Perl komut satırı argümanlarını bir bash komut dosyasından alanlarla mı?

perl'de aşağıdaki test komut dosyası düşünün: (hello.pl)

#!/usr/bin/perl 
print "----------------------------------\n"; 
$numArgs = $#ARGV + 1; 
print "thanks, you gave me $numArgs command-line arguments:\n"; 

foreach $argnum (0 .. $#ARGV) { 
    print "$ARGV[$argnum]\n"; 
} 

Tamam, sadece komut verilen komut satırı argümanları yazdırır.

$ ./hello.pl "apple pie" 
---------------------------------- 
thanks, you gave me 1 command-line arguments: 
apple pie 

Şimdi bir kabuk içinde bu komut dosyasını kullanmak istiyorum: Ben çift tırnak sözcükleri çevreleyen tarafından bir script boşlukla tek argüman verebilir

$ ./hello.pl apple pie 
---------------------------------- 
thanks, you gave me 2 command-line arguments: 
apple 
pie 

: Mesela

senaryo. Böyle shell script kurdum: Ben de aynı parametreleri içeren hello.pl arama ve tırnak kaçan am

#!/bin/bash 

PARAM="apple pie" 
COMMAND="./hello.pl \"$PARAM\"" 

echo "(command is $COMMAND)" 
$COMMAND 

. Bu komut verir: $ KOMUTANLIĞI değişken bu sefer o kadar elmalı turta görmek istemiyor, tam olarak komut satırından perl komut dosyası ikinci kez koştu yol gibi komutu yankıları olsa

$ ./test.sh 
(command is ./hello.pl "apple pie") 
---------------------------------- 
thanks, you gave me 2 command-line arguments: 
"apple 
pie" 

tek bir argüman.

Neden değil?

cevap

0

$COMMAND yerine eval $COMMAND'u denemelisiniz. IFS değişken değer olarak bir boşluk olması ayarlı kabuk ile

2

2 komut satırı bağımsız değişkenleri

"apple 
pie" 

konusu genişleme kabuk kaynaklanmaktadır.

printf '%q\n' "$IFS" # show value of IFS variable 

Sen Xargs & sh -c kullanabilir '... kodunu ...' taklit etmek/sıradan parametre ayrıştırılmasını etkinleştirmek yeniden.

PARAM="'apple pie'" 
printf '%s' "$PARAM" | xargs sh -c './hello.pl "[email protected]"' argv0 

Başka bir seçenek C satırlarını yazmak olabilir (shebang.c gibi)!

http://www.semicomplete.com/blog/geekery/shebang-fix.html

İlgili konular