কীভাবে এখানে "ডকুমেন্টে" $ "মুদ্রণ করতে হবে


42

ব্যাশ-এ এখানে একটি ডক-এ আমি কীভাবে "$" প্রতিধ্বনি করতে পারি?

উদাহরণস্বরূপ, আমি রিমোট সার্ভারের মতো সামগ্রীতে একটি ফাইল রাখতে চাই $ABC=home_dir

$ ssh hostname sudo -s <<EOF
echo "$ABC=home_dir" > file
EOF

তবে এটি একটি পরিবর্তনশীল হিসাবে বিবেচিত হবে। আমি কীভাবে আক্ষরিক মুদ্রণ করতে পারি $?


2
আপনি একক উদ্ধৃতি ব্যবহার করতে পারেন
রাহুল পাতিল

2
এটি অনেকটা ইন্ডিरेশন চলছে। আপনি কি স্থানীয় হোস্টে ফাইলটি তৈরি করতে পারবেন না তা নিশ্চিত scp?
l0b0

উত্তর:


65

আপনি যদি এখানে একটি ডক লিখতে চান এবং আপনি চান না যে ডকটির কোনওটি প্রসারিত করা হোক বা কোনও বিশেষ অক্ষর ব্যাখ্যা করা উচিত, আপনি একক উদ্ধৃতি সহ লেবেলটি উদ্ধৃত করতে পারেন:

$ cat >file <<'EOF'
echo "$ABC=home_dir"
EOF

যাইহোক, আপনার উদাহরণ হিসাবে বর্ণিত হিসাবে আপনার পরিস্থিতি আরও জটিল, কারণ আপনি সত্যিই এই সামগ্রীটি এসএসের মাধ্যমে, একটি রিমোট সিস্টেমে প্রেরণ করছেন, সুডো দ্বারা চালিত করতে যা শেলও আহ্বান করছে (এবং যাতে শেলটি সামগ্রীটিকে প্রসারিত করবে) যেমন). এই অধিকারটি পেতে আপনার আরও স্তরের উদ্ধৃতি প্রয়োজন, তবে এটি এখনও কার্যকর হবে না কারণ সুডোর একটি টার্মিনাল প্রয়োজন (যাতে এটি একটি পাসওয়ার্ড চাইতে পারে) এবং আপনি স্টিডিন থেকে পুনঃনির্দেশিত করেছেন। এমনকি ব্যবহার ssh -tএখানে সহায়তা করবে না।

আমিও জোহানের সাথে একমত। এটি স্পষ্ট নয় যে এটি আপনি যা চান তা সত্যই; মনে রাখবেন যে শেল ভেরিয়েবল রেফারেন্সের জন্য কোনও মান নির্ধারণ করা আইনী নয়, সুতরাং আপনি যে ফাইলটি তৈরির চেষ্টা করছেন সেটি যদি শেল স্ক্রিপ্ট বলে মনে করা হয়, তবে আপনি যেমন বর্ণনা করেছেন তেমন এটি কাজ করবে না। আপনি একটি বিট ব্যাক আপ এবং বর্ণনা কি হতে পারে যদি সত্যিই কাজ করতে চান, আমরা আরো সাহায্য করতে পারেন।


এটি সর্বোত্তম উত্তর কারণ এটি খুব দীর্ঘ এখানে ডকুমেন্টস সরবরাহ করতে পারে। এটি (বেশিরভাগ) মূর্খ-প্রমাণ
ফিলিপ আলভারেজ

22

পালাও $

$ ssh hostname sudo -s <<EOF
echo "\$ABC=home_dir" > file
EOF

আপনার ব্যবহারের ক্ষেত্রে কী তা আমি জানি না তবে সাধারণত আপনি তার home_dir=$ABCপরিবর্তে চান $ABC=home_dir


2
এই সমাধানটি কাজ করবে, তবে ওপি কি বাস্তবের তা চায়? এটি শেল স্ক্রিপ্ট তৈরিরূপে উপস্থিত হয় যা সম্পাদন করা হলে "ফাইল" এ একটি স্ট্রিং সংরক্ষণ করবে যা অ্যাসিগমেন্টের বাম দিকের জন্য ABC কে অবজ্ঞা করবে এবং সম্ভবত =home_dirফাইলটি সংরক্ষণ করবে? অবশ্যই আমি ব্যবহারের
জোহান

2
এটি একটি আক্ষরিককে $রিমোট শেলের কাছে প্রেরণিত করবে , তবে তারপরে স্ট্রিং প্রতিধ্বনি করার আগে সেই শেলটি প্রসারিত হবে । আক্ষরিক ফাইলটিতে লিখতে আপনার আরও একটি (পালানো) ব্যাকস্ল্যাশ দরকার হবে: যাতে দূরবর্তী শেলটি পায় । $ABCfile$echo "\\\$ABC=home_dir"echo "\$ABC=home_dir"
চিপনার


4

আপনি catপ্রত্যন্ত প্রান্তে একটি প্রক্রিয়াতে স্ট্রিং প্রেরণ করে নিজেকে উদ্ধৃত করার একটি স্তর সংরক্ষণ করুন:

echo 'echo $ABC=home_dir' | ssh hostname sudo -s "cat > file"

একক উদ্ধৃতি রক্ষা $স্থানীয় প্রান্তে, এবং কারণ এটি সরাসরি দ্বারা পড়া হয় স্ট্রিং অন্যদিকে শেল দ্বারা কখনো দেখা হয় cat(মাধ্যমে sudo), বরং অন্য শেল কমান্ড একটি আর্গুমেন্ট থাকার চেয়ে।

আপনার কোড সহ আপনার সুরক্ষার জন্য অতিরিক্ত পালানোর দরকার হবে $:

$ ssh hostname sudo -s <<EOF
echo "\\\$ABC=home_dir" > file
EOF

আপনাকে \$রিমোট হোস্টে আক্ষরিক প্রেরণ করতে হবে , যাতে রিমোট শেলটি $ফাইলটিতে আক্ষরিক লিখতে পারে। আপনি এখানে ডক চিহ্নিতকারীকে উদ্ধৃত করে এটিকে আরও সহজ করতে পারেন:

$ ssh hostname sudo -s <<\EOF
echo "\$ABC=home_dir" > file
EOF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.