जब कमांड आउटपुट को किसी वेरिएबल में स्टोर किया जाता है, तो लाइन को कैसे संरक्षित करें?


107

मैं लिनक्स पर बैश शेल का उपयोग कर रहा हूं। मेरे पास यह सरल स्क्रिप्ट है ...

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

हालाँकि, जब मैं यह स्क्रिप्ट चलाता हूं

./temp.sh

सभी आउटपुट गाड़ी के रिटर्न / नई लाइनों के बिना मुद्रित होते हैं। यकीन नहीं है कि अगर इसका रास्ता मैं आउटपुट को $ TEMP, या खुद इको कमांड स्टोर कर रहा हूं।

मैं कमांड के आउटपुट को वेरिएबल में कैसे स्टोर करूं और लाइन ब्रेक / कैरिज रिटर्न को संरक्षित करूं?


3
वे चर में ठीक संरक्षित हैं (पिछले एक को छोड़कर); यह तुम्हारी गूंज है जो टूट गई है। देखें mywiki.wooledge.org/BashPitfalls प्रविष्टि # 14
चार्ल्स डफी

1
भी don'tकी दुकान commandsमें variablesUseएक functionके बजाय
हान सोलो

जवाबों:


208

अपने चर को उद्धृत करें। यहाँ यह क्यों है:

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

उद्धरण के बिना, शेल $TEMPमें वर्णों के साथ प्रतिस्थापित होता है (जिसमें से एक नई पंक्ति है)। फिर, echoशेल को लागू करने से पहले उस स्ट्रिंग को Internal Field Separator(IFS) का उपयोग करके कई तर्कों में विभाजित किया जाता है , और उस तर्क की सूची को पास करता है echo। डिफ़ॉल्ट रूप से, IFSव्हॉट्सएप (स्पेस, टैब और न्यूलाइन्स) पर सेट किया जाता है, इसलिए शेल आपके $TEMPस्ट्रिंग को तर्कों में काटता है और इसे कभी भी न्यूलाइन देखने को नहीं मिलता है, क्योंकि शेल इसे स्पेस की तरह से अलग करता है।


xdotool type "$myVar"काम नहीं करता है। यह अभी भी नई लाइनों के बिना चर की सामग्री टाइप कर रहा है
azerafati

अगर आप कुछ करना चाहते हैं तो क्या करें FOO="$(echo $VAR)"; $VARजब आप पहले से ही उद्धरण के अंदर हैं तो आप ठीक से कैसे उद्धृत करते हैं?
weberc2

@ weberc2 आप इसे फिर से उद्धृत करते हैं "$(echo "$VAR")":। हां, यह पार्स करने के लिए अजीब है, लेकिन जाहिरा तौर पर हमारे लिए गोले के लिए आसान है।
OJFord

3

मैं उसी समस्या में भाग गया हूं, एक उद्धरण मदद करेगा

ubuntu@host:~/apps$ apps="abc
> def"
ubuntu@host:~/apps$ echo $apps
abc def
ubuntu@host:~/apps$ echo "$apps"
abc
def

2
लगभग 5 साल बाद एक प्रश्न का उत्तर देना, पिछले उत्तर (नों) में कोई नया विवरण शामिल किए बिना या एक नया समाधान प्रदान करना एक अच्छा विचार नहीं है; कृपया इस प्रकार के उत्तर पोस्ट करने से बचें।
मशीगारगढ़

1
आपके "लगभग 5 वर्ष", @Mithitgarha, :) की शुद्धता को देखते हुए
नील गतेंबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.