শেল স্ক্রিপ্ট: ফাইলটির অস্তিত্ব না থাকলে আমি ফাইলটিতে মাল্টলাইন কনটেন্ট কীভাবে লিখব?


9

আমি ফাইল তৈরি করতে হবে /opt/nginx/conf.d/default.confশেল স্ক্রিপ্ট এর মাধ্যমে কন্টেন্ট সঙ্গে এবং এটি যদি অস্তিত্ব নেই ফাইল তৈরি করুন:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    root /usr/share/nginx/html;
}

আমি কীভাবে শেল স্ক্রিপ্টের মাধ্যমে মাল্টলাইন কনটেন্ট লিখব?

আমি ডিরেক্টরি তৈরি করেছি

sudo mkdir -p /opt/nginx/conf.d

তবে আমি কীভাবে ফাইল লিখতে জানি না।


1
আপনি> (ফাইলটি ওভাররাইট করতে) বা >> (এটি ইতিমধ্যে বিদ্যমান থাকলে সংযোজন করতে) ব্যবহার করতে পারেন। উদাহরণ: প্রতিধ্বনি "হ্যালো ওয়ার্ল্ড"> file.txt
রব

এটি কি সমস্ত স্থির পাঠ্য, বা এর কোনও অংশকে একটি গতিশীল মান দিয়ে প্রতিস্থাপন করা উচিত? (যেমন হোস্টনাম, পোর্ট, রুট ডিরেক্টরি ইত্যাদি)
জেফ শ্যাচলার

আমি কেবল আপনার প্রশ্নটি স্পষ্ট করতে সম্পাদনা করেছি, তবে আপনি যা চেয়েছিলেন তা ভুল বুঝেছি। ইতিমধ্যে উপস্থিত থাকা সত্ত্বেও আপনি কি ফাইলগুলিতে বিষয়বস্তু যুক্ত করতে চান , না আপনি কেবল ফাইলটি তৈরি করতে চান যদি এটি উপস্থিত না থাকে? ফাইলটি ইতিমধ্যে উপস্থিত থাকলে কী হবে?
টেরডন

উত্তর:


13

সংক্ষিপ্তসার: >>সংযোজন ব্যবহার [ -f file ], পরীক্ষার জন্য ব্যবহার ।

চেষ্টা

if [ ! -f myfile ]
then
   cat <<EOF > myfile
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name $server ;
    root /usr/share/nginx/html;
}
EOF
fi
  • সিনট্যাক্সটিকে cat <<EOF" এখানে নথি " বলা হয়।
  • $server এর মান দ্বারা প্রতিস্থাপন করা হবে, বা অপরিজ্ঞাত থাকলে খালি হবে।
  • যেমন উল্লেখ করা হয়েছে, আপনি 'EOF'যদি কোনওরূপে পরিবর্তিত হওয়া এড়ানোর জন্য একক উদ্ধৃত ব্যবহার করতে পারেন ।
  • আপনার একাধিক প্রতিধ্বনিও থাকতে পারে (খুব বেশি প্রতিধ্বনি থাকলে এটি বজায় রাখার জন্য কষ্টকর হতে পারে)

    echo "## foo.conf" > foo.conf
    echo param1=hello >> foo.conf
    echo param2=world >> foo.conf
    

prepending

ব্যাশে সরাসরি প্রিপেন্ড নেই, হয় অস্থায়ী ফাইল ব্যবহার করুন

mv file file_tmp
cat new_content file_tmp > file
rm file_tmp

বা এটি সম্পাদনা করুন

sed -i -e '1r new_file' -e 'wq' file

আমি কোনও ফাইলে কিছু মাল্টলাইন কনটেন্ট কীভাবে প্রেন্ডেন্ড করব?
ব্যবহারকারী3142695

1
আর একটি বুদ্ধিমান পরিবর্তনটি $
হ'ল

@ user3142695 সবচেয়ে সহজ হ'ল এখানে-ডকুমেন্টটি একটি পৃথক ফাইলে লিখতে হবে এবং তারপরে catদুটি ফাইল একসাথে লিখে ফলাফলটির নামকরণ করা name
কুসালানন্দ

যদি কেউ অনেকগুলি আলাদা আলাদা করে করতে চায় তবে echoকেবল একটি পুনর্নির্দেশকে আরও একটি দক্ষতার মধ্যে রেখে এটিকে আরও দক্ষ করে তুলুন: { echo "foo"; echo "bar"; echo "baz"; } >file- আমরা যখন একবার fileএটিতে একটি লাইন লিখতে চাইছি তখনই আমরা পুনরায় খুলতে পারি না, এবং লাইনটি শেষ হয়ে গেলে এটি বন্ধ করে দিন।
চার্লস ডাফি

এখানে নথির আরও একটি ভাল ব্যবহার:cat << EOF | sudo tee /opt/nginx/conf.d/default.conf ...
lp1051

3

যদি /opt/nginx/conf.d/default.conf ফাইলটি উপস্থিত না থাকে তবে ফাইলটিতে স্ট্যাটিক স্ট্রিংটি মুদ্রণ করুন:

[ -f /opt/nginx/conf.d/default.conf ] || printf 'server {\n    listen 80 default_server;\n    listen [::]:80 default_server;\n    server_name _;\n    root /usr/share/nginx/html;\n}\n' > /opt/nginx/conf.d/default.conf

1
আমি printf '%s\n' "first line" "second line"সম্ভবত আরও কিছুটা পাঠযোগ্য বিবেচনা করব; পালিয়ে যাওয়া কোথায়, তা জানতে পুরো স্ট্রিংটি পড়ার দরকার নেই ..
চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.