আমি বাশ স্ক্রিপ্টে কোনও ফাইলকে এখানে একটি নথি কীভাবে লিখতে পারি?
আমি বাশ স্ক্রিপ্টে কোনও ফাইলকে এখানে একটি নথি কীভাবে লিখতে পারি?
উত্তর:
পড়ুন অ্যাডভান্সড ব্যাশ-স্ক্রিপ্টিং গাইড অধ্যায় 19. এখানে ডকুমেন্টস ।
এখানে একটি উদাহরণ যা কোনও ফাইলের বিষয়বস্তু লিখবে /tmp/yourfilehere
cat << EOF > /tmp/yourfilehere
These contents will be written to the file.
This line is indented.
EOF
নোট করুন যে চূড়ান্ত 'ইওএফ' (দ্য LimitString
) এর শব্দের সামনে কোনও সাদা জায়গা থাকা উচিত নয়, কারণ এর অর্থ হ'ল LimitString
স্বীকৃত হবে না।
শেল স্ক্রিপ্টে, আপনি কোডটি পঠনযোগ্য করে তোলার জন্য ইনডেন্টেশন ব্যবহার করতে চাইতে পারেন, তবে এটি আপনার এখানে নথির মধ্যে পাঠ্য প্রবেশের অনাকাঙ্ক্ষিত প্রভাব ফেলতে পারে। এই ক্ষেত্রে, <<-
নেতৃস্থানীয় ট্যাবগুলি অক্ষম করতে (ড্যাশ অনুসরণের পরে) ব্যবহার করুন ( নোট করুন এটি পরীক্ষা করার জন্য আপনাকে শীর্ষস্থানীয় হোয়াইটস্পেসটি একটি ট্যাব অক্ষরের সাথে প্রতিস্থাপন করতে হবে , কারণ আমি এখানে প্রকৃত ট্যাব অক্ষর মুদ্রণ করতে পারি না।)
#!/usr/bin/env bash
if true ; then
cat <<- EOF > /tmp/yourfilehere
The leading tab is ignored.
EOF
fi
আপনি যদি পাঠ্যে ভেরিয়েবলগুলি ব্যাখ্যা করতে না চান তবে একক উদ্ধৃতি ব্যবহার করুন:
cat << 'EOF' > /tmp/yourfilehere
The variable $FOO will not be interpreted.
EOF
কমান্ড পাইপলাইনের মাধ্যমে উত্তরাধিকারী পাইপলাইন করতে:
cat <<'EOF' | sed 's/a/b/'
foo
bar
baz
EOF
আউটপুট:
foo
bbr
bbz
... অথবা একটি ফাইলের প্রতিবাদ রচনা লিখতে sudo
:
cat <<'EOF' | sed 's/a/b/' | sudo tee /etc/config_file.conf
foo
bar
baz
EOF
<<<
, তারা কি বলা হয়?
<<<
'হিয়ার স্ট্রিংস' বলা হয়। কোড মত tr a-z A-Z <<< 'one two three'
স্ট্রিং ফলাফল ONE TWO THREE
। এ সম্পর্কে আরও তথ্য en.wikipedia.org/wiki/Here_document#Here_strings
<<'EOF'
পরিবর্তে হওয়া উচিত <<EOF
।
এর পরিবর্তে ব্যবহার করার cat
ও ইনপুট / আউটপুটের ফেরৎ এটি ব্যবহার করতে সহায়ক হতে পারে tee
পরিবর্তে:
tee newfile <<EOF
line 1
line 2
line 3
EOF
এটি আরও সংক্ষিপ্ত, পুনর্নির্দেশ অপারেটরের বিপরীতে এটি সংযুক্ত হতে পারে sudo
যদি আপনাকে রুট অনুমতি নিয়ে ফাইলগুলিতে লেখার প্রয়োজন হয়।
> /dev/null
এখানে ফাইলের বিষয়বস্তু তৈরি হওয়ার পরে স্টডআউটে প্রদর্শিত হওয়া রোধ করতে প্রথম লাইনের শেষে যুক্ত করার পরামর্শ দেব ।
sudo
তার সংকোচনের কারণে তার সামঞ্জস্যতার কারণে আমার কাছে আবেদন করেছিল :-)
man tee
। -a
ওভাররাইটের পরিবর্তে পতাকা যুক্ত করতে ফ্ল্যাগটি ব্যবহার করুন ।
বিঃদ্রঃ:
প্রশ্ন (এখানে বাশ স্ক্রিপ্টের কোনও ফাইলকে কীভাবে একটি দস্তাবেজ (ওরফে হেরডোক ) লিখবেন ?) এর (কমপক্ষে) 3 টি প্রধান স্বতন্ত্র মাত্রা বা সাবকিউশন রয়েছে:
root
) ফাইলটির মালিক?(অন্যান্য মাত্রা / অনুচ্ছেদ রয়েছে যা আমি গুরুত্বপূর্ণ বলে বিবেচনা করি না। এগুলি যুক্ত করার জন্য এই উত্তরটি সম্পাদনা করার বিষয়টি বিবেচনা করুন!) উপরে বর্ণিত বিভিন্ন প্রশ্নের বিভিন্ন মাত্রার সাথে বিভিন্ন বিস্ময়কর শনাক্তকারী উপস্থিত রয়েছে - এখানে কিছুই নেই পবিত্র সম্পর্কে EOF
, কেবল নিশ্চিত হয়ে নিন যে আপনি আপনার সীমানা চিহ্নিতকারী হিসাবে যে স্ট্রিংটি ব্যবহার করেন তা আপনার বংশের ভিতরে না ঘটে:
আপনার মালিকানাধীন বিদ্যমান ফাইলটি (বা একটি নতুন ফাইলে লিখুন) ওভাররাইট করতে হেরডকের ভিতরে ভেরিয়েবল রেফারেন্স স্থাপন করুন:
cat << EOF > /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
EOF
আপনার মালিকানাধীন একটি বিদ্যমান ফাইল (বা একটি নতুন ফাইলে লিখুন) সংযোজন করতে হেরডকের ভিতরে ভেরিয়েবল রেফারেন্স স্থাপন করুন:
cat << FOE >> /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
FOE
হেরডোকের আক্ষরিক বিষয়বস্তু সহ আপনার নিজের একটি বিদ্যমান ফাইল (বা একটি নতুন ফাইলে লিখুন) ওভাররাইট করতে:
cat << 'END_OF_FILE' > /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
END_OF_FILE
হেরডোকের আক্ষরিক বিষয়বস্তু সহ আপনার নিজের একটি বিদ্যমান ফাইল (বা একটি নতুন ফাইলে লিখুন) সংযুক্ত করতে:
cat << 'eof' >> /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
eof
মূলের মালিকানাধীন একটি বিদ্যমান ফাইল (বা একটি নতুন ফাইলে লিখুন) ওভাররাইট করতে হেরডকের ভিতরে ভেরিয়েবল রেফারেন্স স্থাপন করে:
cat << until_it_ends | sudo tee /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
until_it_ends
হেরডোকের আক্ষরিক বিষয়বস্তু সহ ব্যবহারকারী = foo- এর মালিকানাধীন একটি বিদ্যমান ফাইল (বা একটি নতুন ফাইলে লিখুন) যুক্ত করতে:
cat << 'Screw_you_Foo' | sudo -u foo tee -a /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
Screw_you_Foo
-a
== --append
; যেমন, tee -a
-> tee
। দেখুন info tee
(আমি এটি এখানে উদ্ধৃত করেছি, কিন্তু মন্তব্য মার্কআপ খুব সীমিত।
sudo tee /path/to/your/file << 'Screw_you_Foo'
?
FOE
পরিবর্তে EOF
পরিশেষে যোগ উদাহরণে?
@ লিভভেনের উত্তরটি তৈরি করতে , এখানে কয়েকটি দরকারী সংমিশ্রণ রয়েছে।
ভেরিয়েবল সাবস্টিটিউশন, শীর্ষস্থানীয় ট্যাব ধরে রাখা, ফাইল ওভাররাইট, স্টকআউট প্রতিধ্বনি
tee /path/to/file <<EOF
${variable}
EOF
কোনও পরিবর্তনশীল বিকল্প নেই , শীর্ষস্থানীয় ট্যাব ধরে রাখা হয়েছে, ফাইলকে ওভাররাইট করুন, স্টডআউটে প্রতিধ্বনি হবে
tee /path/to/file <<'EOF'
${variable}
EOF
ভেরিয়েবল সাবস্টিটিউশন, শীর্ষস্থানীয় ট্যাব সরানো , ওভাররাইট ফাইল, স্টকআউট প্রতিধ্বনি
tee /path/to/file <<-EOF
${variable}
EOF
ভেরিয়েবল সাবস্টিটিউশন, শীর্ষস্থানীয় ট্যাব ধরে রাখা, ফাইলের সাথে সংযোজন , স্টাডাউটের প্রতিধ্বনি
tee -a /path/to/file <<EOF
${variable}
EOF
ভেরিয়েবল সাবস্টিটিউশন, শীর্ষস্থানীয় ট্যাব ধরে রাখা, ফাইল ওভাররাইট, স্টাডাউটের কোনও প্রতিধ্বনি নেই
tee /path/to/file <<EOF >/dev/null
${variable}
EOF
উপরের sudo
পাশাপাশি একত্রিত করা যেতে পারে
sudo -u USER tee /path/to/file <<EOF
${variable}
EOF
গন্তব্য ফাইলের জন্য যখন রুট অনুমতিগুলি প্রয়োজন হয়, তার |sudo tee
পরিবর্তে ব্যবহার করুন >
:
cat << 'EOF' |sudo tee /tmp/yourprotectedfilehere
The variable $FOO will *not* be interpreted.
EOF
ভবিষ্যতের লোকদের যাদের এই সমস্যাটি থাকতে পারে তাদের জন্য নিম্নলিখিত ফর্ম্যাটটি কাজ করেছে:
(cat <<- _EOF_
LogFile /var/log/clamd.log
LogTime yes
DatabaseDirectory /var/lib/clamav
LocalSocket /tmp/clamd.socket
TCPAddr 127.0.0.1
SelfCheck 1020
ScanPDF yes
_EOF_
) > /etc/clamd.conf
cat << END > afile
হেরডোক অনুসরণ করে পুরোপুরি ভাল কাজ করে।
cat
উত্তরের মতো প্রদর্শিত হয়।
cat
একটি subshell, এবং সমস্ত subshell আউটপুট ভিতরে রান ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হয়
উদাহরণস্বরূপ আপনি এটি ব্যবহার করতে পারেন:
প্রথম (এসএসএস সংযোগ তৈরি করা):
while read pass port user ip files directs; do
sshpass -p$pass scp -o 'StrictHostKeyChecking no' -P $port $files $user@$ip:$directs
done <<____HERE
PASS PORT USER IP FILES DIRECTS
. . . . . .
. . . . . .
. . . . . .
PASS PORT USER IP FILES DIRECTS
____HERE
দ্বিতীয় (কার্যকর আদেশগুলি):
while read pass port user ip; do
sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1
COMMAND 1
.
.
.
COMMAND n
ENDSSH1
done <<____HERE
PASS PORT USER IP
. . . .
. . . .
. . . .
PASS PORT USER IP
____HERE
তৃতীয় (আদেশগুলি কার্যকর করা):
Script=$'
#Your commands
'
while read pass port user ip; do
sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p $port $user@$ip "$Script"
done <<___HERE
PASS PORT USER IP
. . . .
. . . .
. . . .
PASS PORT USER IP
___HERE
চতুর্থ (ভেরিয়েবল ব্যবহার করে):
while read pass port user ip fileoutput; do
sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p $port $user@$ip fileinput=$fileinput 'bash -s'<<ENDSSH1
#Your command > $fileinput
#Your command > $fileinput
ENDSSH1
done <<____HERE
PASS PORT USER IP FILE-OUTPUT
. . . . .
. . . . .
. . . . .
PASS PORT USER IP FILE-OUTPUT
____HERE