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


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.