ভেরিয়েবলের সাথে ব্যাশ ব্যবহার করে একাধিক লাইন স্ট্রিং কীভাবে লিখবেন?


232

myconfig.confBASH ব্যবহার করে একটি ফাইলে আমি কীভাবে বহু-লাইন লিখতে পারি ?

#!/bin/bash
kernel="2.6.39";
distro="xyz";

echo <<< EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL >> /etc/myconfig.conf;
cat /etc/myconfig.conf;

উত্তর:


471

সিনট্যাক্স ( <<<) এবং ব্যবহৃত কমান্ডটি ( echo) ভুল।

সঠিক হবে:

#!/bin/bash

kernel="2.6.39"
distro="xyz"
cat >/etc/myconfig.conf <<EOL
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 
EOL

cat /etc/myconfig.conf

এই নির্মাণকে এখানে নথি হিসাবে উল্লেখ করা হয়েছে এবং বাশ ম্যান পৃষ্ঠাগুলির নীচে পাওয়া যাবে man --pager='less -p "\s*Here Documents"' bash


49
এবং আপনি যদি সংযোজন করতে চান তবে এটি বিড়াল >>
বা গাল

19
এটি দুর্দান্ত কাজ করে, তবে আপনাকে নিশ্চিত করতে হবে যে সমাপ্তির সামনে কোনও শ্বেতস্থান নেই EOF, অন্যথায় এটি স্বীকৃত হবে না এবং আপনি ফাইল ত্রুটির অপ্রত্যাশিত প্রান্তে চলে যাবেন ।
নিউকিংলার

10
@ স্টিভেনএকফফ এটিকে হেরডোক বলা হয়।
উইলিয়াম পার্সেল

4
আমার যদি ফাইলটিতে লেখার জন্য সুডোর অনুমতি প্রয়োজন?
gfpacheco

14
@gfpacheco আপনি এর জন্য টি ব্যবহার করতে পারেন, বিড়ালের মতো << EOL | sudo tee /etc/myconfig.conf
জিন চেন

74
#!/bin/bash
kernel="2.6.39";
distro="xyz";

cat > /etc/myconfig.conf << EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL

এটি আপনি চান কি করে।


6
@ktf আমি টাইপ করছিলাম দ্রুত নয়, তবে আপনার চেয়ে কম অক্ষর। ^ _ *
ক্যান্ট

35

আপনি যদি ভেরিয়েবলগুলি প্রতিস্থাপন না করতে চান তবে আপনাকে ইওএলকে একক উদ্ধৃতি দিয়ে ঘিরে রাখা উচিত।

cat >/tmp/myconfig.conf <<'EOL'
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 
EOL

পূর্ববর্তী উদাহরণ:

$ cat /tmp/myconfig.conf 
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 

14

হেরডোক সমাধান অবশ্যই এটি করার সবচেয়ে সাধারণ উপায়। অন্যান্য সাধারণ সমাধানগুলি হ'ল:

প্রতিধ্বনি 'লাইন 1,' "$ {কার্নেল}" '
লাইন 2,
লাইন 3, '"$ {ডিস্ট্রো}"'
লাইন 4 '> /etc/myconfig.conf

এবং

এক্সিকিউট 3> & 1 # বর্তমান স্টডআউট সংরক্ষণ করুন
এক্সিকিউট> /etc/myconfig.conf
প্রতিধ্বনি লাইন 1, {{কার্নেল}
প্রতিধ্বনি লাইন 2, 
প্রতিধ্বনি লাইন 3, $ {ডিস্ট্রো
...
এক্সিকিউট 1> & 3 # স্ট্যান্ডআউট পুনরুদ্ধার করুন

হতে পারে এছাড়াও printfআরও কিছু আকর্ষণীয় প্রকরণ পরিচয় করিয়ে দেয়।
ট্রিপলি

3

নীচে মেকানিজম ফাইলগুলিতে একাধিক লাইন পুনর্নির্দেশে সহায়তা করে। সম্পূর্ণ স্ট্রিং এর নীচে রাখুন "যাতে আমরা ভেরিয়েবলের মানগুলি পুনর্নির্দেশ করতে পারি।

#!/bin/bash
kernel="2.6.39"
echo "line 1, ${kernel}
line 2," > a.txt
echo 'line 2, ${kernel}
line 2,' > b.txt

বিষয়বস্তু a.txtহয়

line 1, 2.6.39
line 2,

বিষয়বস্তু b.txtহয়

line 2, ${kernel}
line 2,
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.