সেই কোডটিতে কোনও শব্দের বিভাজন নেই (সেই বৈশিষ্ট্যে যা অব্যক্ত বিস্তৃতিতে ভেরিয়েবলগুলি বিভক্ত হয়) যেমনটি $myvarউদ্ধৃত হয়নি।
একটি কমান্ড ইনজেকশন দুর্বলতা যেমন $myvarপাস করার আগে প্রসারিত হয় bash। সুতরাং এর বিষয়বস্তু ব্যাশ কোড হিসাবে ব্যাখ্যা করা হয়!
সেখানে থাকা স্পেসগুলি শব্দের বিভক্তিরcd কারণে নয় , তবে শেল বাক্য গঠনতে বিভিন্ন টোকেন হিসাবে বিভক্ত হবে বলে একাধিক যুক্তি পাঠিয়ে দেবে। এর মান সহ bye;reboot, এটি পুনরায় চালু হবে! ¹
এখানে, আপনি চান:
sudo bash -c 'cd -P -- "$1"' bash "$myvar"
(যেখানে আপনি বিষয়বস্তু পাস $myvarযে ইনলাইন স্ক্রিপ্ট প্রথম আর্গুমেন্ট হিসেবে; নোট কিভাবে উভয় $myvarএবং $1আটকান IFS-শব্দ-বিভাজন (এবং globbing) এর নিজ নিজ শেল জন্য উদ্ধৃত করা হয়েছে)।
বা:
sudo MYVAR="$myvar" bash -c 'cd -P -- "$MYVAR"'
(যেখানে আপনি $myvarপরিবেশের পরিবর্তনশীলের বিষয়বস্তুগুলি পাস করেন )।
অবশ্যই আপনি চালিয়ে দরকারী কিছু অর্জন করা হবে না শুধুমাত্র cd যে ইনলাইন লিপিতে (কিনা চেক ছাড়া অন্য rootকরতে পারেন cdসেখানে প্রবেশ)। সম্ভবত, আপনি সেই স্ক্রিপ্টটি cdসেখানে চান এবং তারপরে সেখানে অন্য কিছু করুন:
sudo bash -c 'cd -P -- "$1" && do-something' bash "$myvar"
যদি অন্যথায় আপনার অ্যাক্সেস না থাকে এমন কোনও ডিরেক্টরিতে sudoসক্ষম হওয়ার উদ্দেশ্যে যদি উদ্দেশ্যটি হয় cdতবে তা সত্যিই কাজ করতে পারে না।
sudo sh -c 'cd -P -- "$1" && exec bash' sh "$myvar"
bashএর বর্তমান ডিরেক্টরিতে একটি ইন্টারেক্টিভ শুরু করবে $myvar। কিন্তু যে শেল হিসাবে চলমান হবে root।
আপনি করতে পারেন:
sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bashবর্তমান ডিরেক্টরিটি থাকার সাথে একটি অনিচ্ছাকৃত ইন্টারেক্টিভ পেতে $myvar, তবে যদি আপনাকে cdপ্রথমে সেই ডিরেক্টরিটিতে প্রবেশের অনুমতি না থাকে তবে আপনি যদি বর্তমান ডিরেক্টরিটি তৈরি করেন তখনও আপনি সেই ডিরেক্টরিতে কিছু করতে সক্ষম হবেন না।
$ myvar=/var/spool/cron/crontabs
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ ls
ls: cannot open directory '.': Permission denied
একটি ব্যতিক্রম হ'ল যদি আপনার নিজেরাই ডিরেক্টরিতে অনুসন্ধানের অনুমতি পেয়ে থাকেন তবে এর পথের ডিরেক্টরিগুলির একটিতে না থেকে:
$ myvar=1/2
$ mkdir -p "$myvar"
$ chmod 0 1
$ cd 1/2
cd: permission denied: 1/2
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ pwd
/home/stephane/1/2
bash-4.4$ mkdir 3
bash-4.4$ ls
3
bash-4.4$ cd "$PWD"
bash: cd: /home/stephane/1/2: Permission denied
¹ কড়া কথায় বলতে গেলে (আক্ষরিক) $myvarমতো মানের জন্য শেল $(seq 10)দ্বারা এই কমান্ডের প্রতিস্থাপনের প্রসার ঘটলে শব্দ বিভাজন অবশ্যই হবেbashroot
cdভিতরেই কেবল প্রভাব রয়েছেbash -c।