সুডো পাসওয়ার্ডের জন্য অনুরোধ জানানো হয়েছে এবং প্রোগ্রামের মাধ্যমে বাশ স্ক্রিপ্টে সুবিধা বাড়িয়ে দেওয়া হবে?


49

আমি বর্তমানে একটি বাশ স্ক্রিপ্টে কাজ করছি যা স্টক লিনাক্স সিস্টেমে (বর্তমানে উবুন্টু) বিভিন্ন প্রোগ্রাম ইনস্টল ও সেট আপ করে। যেহেতু এটি প্রোগ্রাম ইনস্টল করে এবং বিভিন্ন ফোল্ডারে অনেকগুলি ফাইলের অনুলিপি করে যার জন্য উন্নত সুবিধাগুলির প্রয়োজন হয়, আমি ইতিমধ্যে "আমার উন্নত সুবিধাগুলি প্রয়োজন" - এবং প্রস্থানটি স্ট্যান্ডার্ডটি সম্পন্ন করেছি।

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

যেহেতু এটি স্টক লিনাক্স ইনস্টলগুলিতে চালানোর জন্য তৈরি করা হয়েছে, সিস্টেমটি পরিবর্তনকারী যে কোনও বিকল্প আমার উদ্দেশ্যে কাজ করবে না। সমস্ত অপশন স্ক্রিপ্ট নিজেই থাকা প্রয়োজন।

বাশের মধ্যে এটি কি সম্ভব? যদি তা হয় তবে এটি করার সর্বোত্তম (নিরাপদ, তবুও সংক্ষিপ্ত) উপায় কী?



@ মিশেলমরোজেক - আহ, খণ্ড খণ্ডন করার চেষ্টা করার সময় এতগুলি কুলুঙ্গি সাইট থাকার আনন্দ। এবং আপনি জানেন যে, আপনি যে লিঙ্কটি দিয়েছিলেন সেটি গুগল অনুসন্ধান করার সময় একবার আমার জন্য আসে নি।
শওনা 20


@jww আপনি কি বুঝতে পেরেছেন যে এই লিঙ্কগুলির প্রায় সবগুলিই এইটির 4 বছর পরে জিজ্ঞাসা করা হয়েছিল , তাই না?
শওনা

1
@ শৌনা - আমি ধারণা করছি আপনি এখনই সমস্যার সমাধান করেছেন। লিঙ্কগুলি ভবিষ্যতের দর্শনার্থীদের জন্য।

উত্তর:



16

আমার পরামর্শ:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done

কি if [[ -t 1 ]];জন্য পরীক্ষা করে?
শওনা

আহ, ঠিক আছে. আমি বুঝতে পারলাম এটির টার্মিনাল বনাম জিইউআইয়ের সাথে কিছু করার আছে, তবে নিশ্চিত ছিলাম না যে যদি বিবৃতি নিজেই পরীক্ষা করে দেখছিল।
শৌনা

আশ্চর্যজনক, ধন্যবাদ!
ফায়ার-ড্রাগন-ডোল

16

স্ক্রিপ্টের প্রথম লাইন হিসাবে এটি যুক্ত করুন:

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

পরিবর্তন sudoকরার জন্য gksuবা gksudoআপনি যদি একটি গ্রাফিকাল প্রম্পট পছন্দ করেন।


3
দ্রষ্টব্য যে "$*"সমস্ত আর্গুমেন্টকে একের সাথে একীভূত করতে /path/to/script one two threeচলেছে ( ফলে তৈরি $1হচ্ছে one two three), এবং $*উদ্ধৃতি ব্যতীত আর্গুমেন্টগুলিতে ফাঁসানো হবে। "$@"সঠিকভাবে কাজ করে
মাইকেল মরোজেক

@ মিশেলমরোজেক আহ, ঠিক আছে। এটিই আমি খুঁজছিলাম, স্থির
কেভিন

ডেবিয়ানে এটি করার কোনও উপায় আছে, যেখানে কোনও সুডো কমান্ড নেই বলে মনে হচ্ছে?
ভুল ব্যবহারকারী নাম 18

@ রাইং ব্যবহারকারী নাম ইনস্টল করুন sudo, এটি ব্যবহারের চেয়ে অনেক ভাল su। তবে আপনি যদি সত্যিই চান তবে সম্ভবতexec su -c "$0" "$@"
কেভিন

2

উদাহরণস্বরূপ স্ক্রিপ্ট আমি ভাগ করে নেওয়ার মন চাই না ::

#!/bin/bash
[ "$UID" -eq 0 ] || exec sudo "$0" "$@" && echo -n "sudo bash what: "
read WHAT
sudo $WHAT

--ImP.TeK


[ "$UID" -eq 0 ] || exec sudo "$0" "$@"- সত্যিই দক্ষ একটি লাইনের মতো দেখাচ্ছে! নিস!
গ্রোভেনেক্টর

কার্যকর ইউআইডি এখানে $EUDI, বা সর্বদা একই ফলাফল ব্যবহার করা কি বোধগম্য হবে ? উদাহরণস্বরূপ,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"
গ্রোভেনেক্টর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.