কমান্ড প্রম্পট থেকে if-বিবৃতি কার্যকর


19

ব্যাশে আমি নিম্নলিখিতগুলি করতে পারি:

if [ -f /tmp/test.txt ]; then echo "true"; fi

তবে, আমি sudoযদি সামনে যুক্ত করি তবে এটি আর কাজ করে না:

sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'

আমি কীভাবে এটি কাজ করতে পারি?



এটি sudoশুধুমাত্র testএবং / অথবা কেবলমাত্রদের কাছেই ভাল অনুশীলন echo। পুরো ifবিবৃতি নয়।
জিপ্পি

মানে if sudo test? হ্যাঁ, এটি আরও ভাল হবে। আমি testছাড়া ব্যবহার করতে পারি না if, কারণ এটি অন্যথায় প্রস্থান কোড নির্ধারণ করে।
m33lky

উত্তর:


14

sudoexecশেল ইন্টারপ্রেটারের মাধ্যমে নয়, তার যুক্তিটি ব্যবহার করে । অতএব, এটি প্রকৃত বাইনারি প্রোগ্রামগুলির মধ্যে সীমাবদ্ধ এবং শেল ফাংশন, উপকরণ বা বিল্টিনগুলি ( ifএকটি বিল্টিন ) ব্যবহার করতে পারে না । লক্ষ্য করুন -iএবং -sঅপশন একটি লগইন বা অ- লগ-ইন শেল যথাক্রমে দেওয়া কমান্ডগুলো ব্যবহার করা যেতে পারে (বা শুধু শেল সমস্যাগুলি ইন্টারেক্টিভ রূপে; মনে রাখবেন আপনি সেমিকোলন অব্যাহতি অথবা কমান্ড উদ্ধৃত করা হবে)।

$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y

সুতরাং, আমি যদি ব্যবহার করি -iবা -s, যদি-বিবৃতিটি সঠিকভাবে মূল্যায়ন করা হয়?
m33lky

1
হ্যাঁ, যতক্ষণ এটি উদ্ধৃত হয়েছে বা সঠিকভাবে পালিয়ে গেছে। আমার সম্পাদনা দেখুন।
কেভিন

9

শেলের মাধ্যমে স্ট্রিং আর্গুমেন্ট হিসাবে লাইনটি কল করার চেষ্টা করুন।

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.