&&কমান্ডগুলির মধ্যে অপারেটরের সাথে , প্রতিটি কমান্ড ক্রমানুসারে চলে এবং যদি কোনও কমান্ড ব্যর্থ হয় (যেমন একটি ননজারো স্থিতি ফিরিয়ে দেয়), পরবর্তী কমান্ডগুলি কার্যকর করা হয় না।
আপনি যদি কিছু না চালিয়ে যেতে চান তবে, পরিবর্তে ব্যবহার করুন ;(বা একটি নতুন লাইন, যা সমতুল্য) &&। এখানে আপনাকে একটি কমান্ড কার্যকর করতে হবে এবং এটি সফল হলে, তারা সফল হয় কিনা সে সম্পর্কে আরও কিছু কমান্ড কার্যকর করতে হবে। এটি অর্জনের একটি উপায় হ'ল এই কমান্ডগুলি একটি ব্রেস গ্রুপের মধ্যে রাখা (কেবলমাত্র cd … && mount1; mount2কাজ করবে না কারণ এটি কার্যকর করে mount2বা না cdঅগ্রাধিকারের কারণে সফল হয়)।
cd /mnt/gentoo && {
mount -t proc none /mnt/gentoo/proc
mount --rbind /dev /mnt/gentoo/dev
mount --rbind /sys /mnt/gentoo/sys
…
}
বিকল্পভাবে, স্ক্রিপ্ট থেকে প্রস্থান করুন বা cdব্যর্থ হলে ফাংশন থেকে ফিরে আসুন ।
cd /mnt/gentoo || exit $?
mount -t proc none /mnt/gentoo/proc
…
বিকল্পভাবে, অধীনে চালনা করুন set -e, এবং || trueব্যর্থ হতে পারে এমন কমান্ডগুলির পরে ("বা যাই হোক চালিয়ে যান") রাখুন।
set -e
cd /mnt/gentoo
mount -t proc none /mnt/gentoo/proc || true
…
বিকল্পভাবে, একটি কমান্ড লিখুন যা অবশ্যই সফল হবে: পরীক্ষা করে যদি /procইতিমধ্যে মাউন্ট করা থাকে।
mount_if_needed () {
eval "mount_point=${\$#}"
awk -v target="$mount_point" '$2 == target {exit(0)} END {exit(1)}' </proc/mounts ||
mount "$@"
}
set -e
cd /mnt/gentoo
mount_if_needed -t proc none /mnt/gentoo/proc
আপনি যেখানে কল করবেন সেখানে আপনার আরও একটি সমস্যা আছে chroot। আপনি লিখেছেন: "ক্রুটে বাশ চালান। যখন বাশ বের হয়, দৌড়াও sourceএবং export। " এটি সম্ভবত আপনি বোঝাতে চেয়েছিলেন না। পাঠ /etc/profileলগইন শেল তৈরি করে করা যায় ing সেট করার একটি সম্ভাব্য উপায় PS1এটি ব্যাশ চালানোর আগে সেট করে রাখা হতে পারে, তবে এটি যদি /etc/profileওভাররাইড করে তবে এটি কার্যকর হবে না , যা সাধারণ। একটি ক্রুটের ভিতরে চলতে থাকলে আরও ভাল উপায় সেট PS1করা ( না, )।~/.bashrc .bashrc.profile
chroot . bash --login
ডেবিয়ান সেট নিম্নলিখিত কোড ব্যবহার PS1মধ্যে /etc/bash.bashrcসামগ্রীর উপর ভিত্তি করে /etc/debian_chroot:
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, overwrite the one in /etc/profile)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
বিকল্পভাবে, প্রম্পটের জন্য, পরিবর্তে একটি পরিবেশের ভেরিয়েবল ব্যবহার করুন: চালান
CHROOT_LOCATION=$PWD chroot bash --login
এবং এটিতে ~/.bashrcবা /etc/bash.bashrc:
if [ -n "$CHROOT_LOCATION" ]; then PS1="($CHROOT_LOCATION)$PS1"; fi
;। প্রতিটি কমান্ডকে তার নিজস্ব লাইনে রাখুন, তবে আপনাকে এটিকে থেকেও মুক্তি দিতে হবেset -e। আপনি যদি কমান্ড ব্যর্থতার বিষয়ে চিন্তা না করেন তবে কেন ব্যবহার করবেনset -e? (আমি জানি যে প্রশ্নটি একটি লাইনের জন্য চেয়েছিল, তবে এটি কোনও স্ক্রিপ্টের মধ্যে কোনও অর্থ দেয় না)।