जवाबों:
इस आदमी की कोशिश करो =):
sed -n 'line_num p' | bash
या
"$(sed -n 'line_num p')"
line_num
और p
उदाहरण के लिए यदि line_num
123 है, तो आप कर सकते हैं sed -n 123p | bash
। और अगर sh
पर्याप्त है, तो sh
इसके बजाय बस का उपयोग करें bash
।
sed -n 'line_num p' | sh
एक और समाधान हो सकता है? क्या यह अधिक अनुकूलता है?
sh
वास्तव में शेल क्या है। डेबियन (और व्युत्पन्न) सिस्टम sh
पर आमतौर पर है dash
। यदि स्क्रिप्ट के लिए लिखा गया है dash
(या अन्यथा पोर्टेबल सिंटैक्स पर निर्भर करता है) तो शायद, हाँ, लेकिन अगर यह लिखा जाता है bash
तो लगभग निश्चित रूप से नहीं।
history
और मैं देखूं कि मैं लाइन 900 को चलाना चाहता हूं, तो क्या मैं किसी तरह लाइन 900 चला सकता हूं?
यदि आप यह अंतःक्रियात्मक रूप से कर रहे हैं, तो आप लाइन को बैश इतिहास में लिख सकते हैं:
history -s "$(sed -n 'line_num p')"
फिर ↑Enterलाइन को रीडलाइन बफर में सम्मिलित करने के लिए दबाएं , और इसे निष्पादित करें; इससे पहले कि आपको बहुत देर हो जाए लाइन में झांकने का मौका दें।
man history
history
एक बिल्ट-इन है, इसलिए इसे help history
(या man bash
, लेकिन यह बहुत अधिक पढ़ने का) दस्तावेज है । उपरोक्त उद्धरण, history -s
"एआरजी को इतिहास सूची में एकल प्रविष्टि के रूप में जोड़ देगा"
तुम कर सकते हो...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
वह $NUM
शेल चर में आपकी स्क्रिप्ट से केवल पंक्ति प्राप्त करेगा $line
और फिर वर्तमान शेल में एक कमांड के रूप में इसका मूल्यांकन करेगा।
ऐसा करने का एक और तरीका इस तरह दिख सकता है:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval
।
gnu sed
है e
झंडा कुछ की तरह तो sed "${NUM}"'!d;s/^//e;q'
भी काम होगा