2011-12-27 14 views
8

से php stdin मुझे पाइप, और हेड्रोक दोनों से इनपुट प्राप्त हो सकता है, और कमांड लाइन पर दोनों php के भीतर से उनका उपयोग कर सकते हैं।बैश पाइप और हेरेडोक

मैं इस तरह कुछ करना चाहता हूँ:

bash$ ls -l | php <<'code' 
<?php 
    echo $piped; 
?> 
code 

कौन सा ls -l

का परिणाम भी लौटना चाहिए, मैं PHP स्क्रिप्ट के लिए हियरडॉक इनपुट के साथ php -R उपयोग कर सकते हैं?

+0

@DaveRandom, ** यहां स्ट्रिंग ** को तीन '<' और ** यहां दस्तावेज़ ** दो '<' की आवश्यकता है। –

+0

@ सिप्लु मैं अपने पैडेंट्री को वापस लेता हूं और हार मानता हूं (उसमें मैं पहले कभी भी बैश के संदर्भ में नहीं आया था)। टिप्पणी हटा दी जाएगी ... – DaveRandom

+0

@ डेव यादृच्छिकता: पैडेंटिज्म की आवश्यकता है कि आप अनुचित स्थानों में apostrophes लिखना बंद कर दें। –

उत्तर

9

पाइपिंग

ls -l | php -r 'print_r(file("php://stdin"));'


हियरडॉक

$ php <<CODE 
<?php 
echo "Hello World\n"; 
?> 
CODE 
Hello World 

संयुक्त

$ ls -l | php <<'CODE' 
<?php 
$f = file("php://stdin"); 
foreach($f as $k=>$v){ 
echo "[$k]=>$v"; 
} 
?> 
Program Finished 
CODE 

[0]=><?php 
[1]=>$f = file("php://stdin"); 
[2]=>foreach($f as $k=>$v){ 
[3]=>echo "[$k]=>$v"; 
[4]=>} 
[5]=>?> 
[6]=>Program Finished 
Program Finished 

नोट: जब आप नए जोड़े php कोड php आदेश के लिए यहाँ दस्तावेज का उपयोग ओवरराइड करता है पिछले stdin

+0

तो आप जो कह रहे हैं वह यह है कि जब आप पाइपिंग और हेरेडोक को जोड़ते हैं, तो पाइप वाले हिस्से को हेरेडोक भाग से ट्राम किया जाता है, और इसे पुनर्प्राप्त नहीं किया जा सकता है? –

+0

@ बिलीमून हां। इसे वापस नहीं किया जा सकता है। –

1

सवाल का -R भाग के बारे में:

-R/--process-code

प्रत्येक इनपुट लाइन के लिए निष्पादित करने के लिए PHP कोड। PHP 5 में जोड़ा गया।

इस मोड में दो विशेष चर उपलब्ध हैं: $argn और $argi$argn में उस समय लाइन PHP प्रसंस्करण होगी, जबकि $argi में लाइन नंबर होगा। Docs

अगर मैं आपके सवाल का सही समझ में आया, आप $argn चर के लिए देख रहे हैं। हेरेडोक को आपके बैश द्वारा समर्थन दिया जाना चाहिए।

संपादित करें: अरे, अभी कई लाइनों पर मूल्य के साथ आह्वान:

$ ls -l | php -R ' 
printf("#%02d: %s\n", $argi, $argn); 
' 

(मुझे लगता है कि स्विच के लिए एकल उद्धरण उपयोग करना आसान हो) * बैश * में

+0

मैं समझ नहीं सकता कि हेड्रोक को स्ट्रिंग के बजाय 'php -R' में कैसे पास किया जाए, और मुझे यकीन नहीं है कि यह सीधे संभव है। –

+0

मेरा बुरा, हेड्रोक के बजाय बस एक बहुभाषी "स्ट्रिंग" आज़माएं। इसे प्रतिबिंबित करने के लिए प्रश्न संपादित किया। – hakre

+0

वाह, बहु लाइन स्ट्रिंग - क्या एक रहस्योद्घाटन। सरल, और सुरुचिपूर्ण - मुझे कोई जानकारी नहीं है ... मैं हाल ही में जावास्क्रिप्ट लिखने में बहुत अधिक समय बिता रहा हूं! –