कैसे उद्धृत आर्ग / बिन / समय द्वारा नियंत्रित किया जाता है


1

मैं फॉर्म में एक कस्टम बाइनरी टाइम कर रहा हूं: ./prog --opt1=arg1 --opt2=arg2 --opt3="arg3"

यह आवश्यक है कि तीसरे विकल्प में एक उद्धृत तर्क हो। एक स्क्रिप्ट में मैं सभी विकल्पों को सहेजता हूं:

exec=./prog
opts="--opt1=arg1 --opt2=arg2 --opt3=\"arg3\""

जब मैं कार्यक्रम के समय की कोशिश करता हूं, तो मुझे अपने प्रोग्राम को आर्गेज्म देने में त्रुटि हो रही है। मैं यह अनुमान लगा रहा हूं क्योंकि यह अंतिम आरजी के रूप में देखा जा रहा है। के उत्पादन /bin/time:

\bin\time -v $exec $opts

Error parsing args (मेरे कार्यक्रम से)
Command being timed: "./prog --opt1=arg1 --opt2=arg2 --opt3="arg3""

हालाँकि जब मैं सिर्फ कॉपी और पेस्ट करता हूं, तो कमांड का दावा क्या है, यह ठीक चलता है:

./prog --opt1=arg1 --opt2=arg2 --opt3="arg3" - ठीक है

क्या /bin/timeकर रहा है और मैं इसे कैसे ठीक कर सकता हूं? मुझे लगता है कि यह उद्धरण के साथ क्या करना है, जैसे कि शायद यह कुछ या कुछ चलाता है। मुझे यकीन नहीं है कि इसके बारे में क्या करना है।

जवाबों:


0

मैंने इसे पूरे कमांड को एक चर पर सेट करके तय किया, और फिर उसका मूल्यांकन किया:

$ full_cmd="/bin/time -v $exec $opts"
$ eval $full_cmd


evalऐसा करने का गलत तरीका है; इसमें अप्रत्याशित (और कभी-कभी समझ से बाहर) बग पैदा करने के लिए एक अच्छी-खासी प्रतिष्ठा है। BashFAQ # 50 देखें : मैं एक चर में एक कमांड डालने की कोशिश कर रहा हूं, लेकिन जटिल मामले हमेशा विफल होते हैं! (और कई पिछले उत्तर जो इसे लिंक करते हैं) बेहतर विचारों के लिए।
गॉर्डन डेविसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.