ভেরিয়েবলের কমান্ড আউটপুট সংরক্ষণ করার সময় লাইন ব্রেকগুলি কীভাবে সংরক্ষণ করবেন?


103

আমি লিনাক্সে ব্যাশ শেল ব্যবহার করছি। আমার এই সহজ স্ক্রিপ্টটি আছে ...

#!/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 এ সংরক্ষণ করছি বা ইকো কমান্ড নিজেই if

আমি কীভাবে কমান্ডের আউটপুটটিকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করব এবং লাইন ব্রেক / ক্যারেজ রিটার্ন সংরক্ষণ করব?


4
এগুলি ভেরিয়েবলটিতে ঠিক আছে (শেষটি ব্যতীত) সংরক্ষণ করা হয়েছে; এটি আপনার প্রতিধ্বনি ভাঙ্গা। Mywiki.wooledge.org/BashPitfalls এন্ট্রি দেখুন # 14
চার্লস ডাফি

4
এছাড়াও, don'tসংরক্ষণ commandsমধ্যে variablesUseএকটি functionপরিবর্তে
হান একাকী

উত্তর:


202

আপনার পরিবর্তনশীল উদ্ধৃতি । এখানে এটি কেন:

$ 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(আইএফএস) ব্যবহার করে একাধিক আর্গুমেন্টে বিভক্ত হয় এবং ফলাফলের যুক্তিগুলির তালিকাটি পাস করে echo। ডিফল্টরূপে, IFSহোয়াইটস্পেসে সেট করা হয় (স্পেসস, ট্যাব এবং নিউলাইনস), সুতরাং শেলটি আপনার $TEMPস্ট্রিংকে আর্গুমেন্ট হিসাবে ছড়িয়ে দেয় এবং এটি কখনই নতুন লাইন দেখতে পায় না, কারণ শেল এটিকে একটি স্পেসের মতো পৃথক হিসাবে বিবেচনা করে।


xdotool type "$myVar"কাজ করে না এটি এখনও নতুন লাইন ছাড়াই ভেরিয়েবলের সামগ্রীটি টাইপ করছে
আজেফরাতি

এমন কিছু করতে চাইলে কী হয় FOO="$(echo $VAR)"; কিভাবে আপনি উদ্ধৃত কর $VARসঠিকভাবে যখন এটি কোট ভিতরে ইতিমধ্যই থাকা?
weberc2

@ weberc2 আপনি কেবল এটি আবার উদ্ধৃতি: "$(echo "$VAR")"। হ্যাঁ, এটি পার্স করা অদ্ভুত, তবে শেলগুলির জন্য আমাদের চেয়ে এটি আরও সহজ।
ওজেফোর্ড

3

আমি একই সমস্যায় পড়েছি, একটি উদ্ধৃতি সাহায্য করবে

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

4
পূর্ববর্তী উত্তরগুলিতে কোনও নতুন বিবরণ যুক্ত না করে বা একটি নতুন সমাধান সরবরাহ না করে প্রায় 5 বছর পরে একটি প্রশ্নের উত্তর দেওয়া ভাল ধারণা নয়; দয়া করে এই ধরণের উত্তর পোস্ট করা এড়িয়ে যান।
MAChitgarha

4
আপনার "প্রায় 5 বছর" এর নির্ভুলতা ভালবাসা, @ এমএইচিতগার, :)
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.