स्क्रिप्ट में PHP कमांड के पास शैल - php, bash, shell से भिन्न परिणाम हैं

मेरे पास एक बाश लिपि में निम्न पंक्तियां हैं:

ACTIONS_COMMAND="php -f $BASEDIR/scripts/activities.php < "$SRC_DIR/%s/AndroidManifest.xml""

printf -v ACTIONS_CMD "$ACTIONS_COMMAND" $FOLDER

$ACTIONS_CMD

यह एक एंड्रॉइड अनुप्रयोगों के लिए एक ही ऑपरेशन करने के लिए एक लूप के अंदर चलाता है। जब मैं गूंजता हूं $ACTIONS_CMD और कमांड को कॉपी और पेस्ट करें, यह सही आउटपुट उत्पन्न करता है, लेकिन स्क्रिप्ट स्वयं PHP शुरू करता है, लेकिन कॉपी नहीं करता है STDIN। मुझे यह पता है क्योंकि जब तक मैं धक्का नहीं देता तब तक PHP लटकता है Ctrl-D कीबोर्ड पर और फिर यह शिकायत करता है कि कोई इनपुट नहीं था।

मैंने PHP कमांड को स्विच करने का प्रयास किया

ACTIONS_COMMAND="cat "$SRC_DIR/%s/AndroidManifest.xml" | php -f $BASEDIR/scripts/activities.php"

जब पहला फ़ाइल नाम कोट्स में होता है (जो मुझे लगता है कि यह सुरक्षा के लिए होना चाहिए), मुझे मिलता है

cat: "apps/app_name/AndroidManifest.xml": No such file or directory
cat: |: No such file or directory
cat: php: No such file or directory
cat: -f: No such file or directory
<?php
... REST OF PHP SCRIPT ...

और उद्धरण के बिना, यह सिर्फ टर्मिनल विंडो में outputs।

यदि यह मायने रखता है, तो यह है GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)

उत्तर:

उत्तर № 1 के लिए 1

आप इस तरह की स्ट्रिंग में इनपुट / आउटपुट रीडायरेक्शन वाले प्रोग्राम निष्पादित नहीं कर सकते हैं। यह आपके द्वारा निष्पादित प्रोग्राम में इनपुट के रूप में पाइप और कोण वर्णों और फ़ाइल का उपयोग करने का प्रयास करेगा।

पुनर्निर्देशन करने के लिए आपको उस स्ट्रिंग को एक खोल में पास करने की आवश्यकता है।

ऐसा करने का एक तरीका है:

bash -c "$ACTIONS_COMMAND"

संबंधित सवाल
सबसे लोकप्रिय