ডিফল্ট শেল হিসাবে বাশ কীভাবে সেট করবেন?


10

আমি যখন সায়ানোজেনমডের সাথে কোনও ডিভাইসে অ্যাডবি করি, তখন আমি একটি দুর্দান্ত বাশ শেল, রঙ প্রম্পট এবং বাশার্ক উপস্থাপন করি। আমি / system / xbin / bash থেকে / system / bin / sh তে একটি সিমিলিংক দেখতে পাচ্ছি না। কীভাবে তারা sh এর পরিবর্তে ডিফল্ট শেলটি বাশে সেট করতে পারে? আমি আরসি ফাইল দিয়ে দেখেছি, কিন্তু কিছুই পাইনি। আমি আমার অ্যান্ড্রয়েড বিল্ডেও এটি করতে চাই, যা সায়ানোজেনমড নয়।

হালনাগাদ

সিএম 7 এর সাথে স্ক্র্যাচ থেকে পুনরায় ইনস্টল করার পরে, আমাকে ব্যাশের বদলে শ নিয়ে যাওয়া হবে। এখন প্রশ্নটি কীভাবে বাশকে ডিফল্ট হিসাবে সেট করবেন।


ভ্যানিলা সিএম 7 (উত্স থেকে নির্মিত) আমাকে কমে যায়, যখন আমি সংযোগ করার জন্য অ্যাডবি ব্যবহার করি shনা bash। আপনি কোন বিল্ড ব্যবহার করছেন?
ওনাররেথিস

ভিউসোনিক জি ট্যাবলেটটির জন্য এটি 7.1.0.1। যদিও আমি উত্স থেকে তৈরি না।
রবি

উত্তর:


7

যখন adb shellমৃত্যুদন্ড কার্যকর করা হয়, অ্যান্ড্রয়েড পক্ষটি তখন অ্যাডবিও চালু করে যা পরে কার্যকর করে /system/bin/sh -। এই পথটি হার্ড-কোডড রয়েছে system/core/adb/services.c:

347 #if ADB_HOST
348 #define SHELL_COMMAND "/bin/sh"
349 #define ALTERNATE_SHELL_COMMAND ""
350 #else
351 #define SHELL_COMMAND "/system/bin/sh"
352 #define ALTERNATE_SHELL_COMMAND "/sbin/sh"
353 #endif

আপনি যদি এটি ব্যাশে পরিবর্তন করতে চান তবে আপনাকে এটি পুনরায় সংকলন করতে হবে।

ইন্টারেক্টিভ শেলটি চালানোর সময় ফাইল থেকে কিছু কমান্ড কার্যকর করা সম্ভব। লিখিত হিসাবে system/core/sh/main.c, sh -( -ইন্টারেক্টিভ মোডের জন্য নোট করুন) নিম্নলিখিত ফাইলগুলি থেকে (এই ক্রমে) পড়ে:

  • /etc/profile
  • .profile(বর্তমান ডিরেক্টরি সম্পর্কিত, এটি এর /.profileজন্য)adb shell
  • $ENV(পরিবেশের ভেরিয়েবল ENVএকটি ফাইলের দিকে নির্দেশ করা উচিত)

হিসাবে /etc/এবং /কেবল পঠনযোগ্য, কিছু লোড করার একমাত্র উপায় ছিল সেট করে ENV। আপনি সম্ভবত থেকে একটি সিমবলিক লিঙ্ক তৈরি করতে পারেন /etc/profileথেকে /data/profileমাউন্ট দ্বারা /রিড-রাইট (পাঠকদের জন্য ব্যায়াম)।


1
/ ইত্যাদি হ'ল / সিস্টেম পার্টিশনের জন্য একটি সিমিলিঙ্ক। আমি সেই রিড-রাইটটি রিমোট করে দিয়েছি এবং / ইত্যাদি / প্রোফাইল যুক্ত করেছি তবে এটি sh :(
কলিন

5

পরীক্ষা করার জন্য আমার কাছে এখনই আমার সাথে আমার অ্যান্ড্রয়েড নেই, তবে অ্যান্ড্রয়েড টার্মিনাল এমুলেটরটির সাথে যদি আপনি মেনুতে যান তবে আপনি "কমান্ড লাইন" বা "প্রাথমিক কমান্ড" বিকল্পটি ব্যবহার করতে সক্ষম হতে পারেন।

এখানে চিত্র বর্ণনা লিখুন


জি, আমাকে আমার এডবি প্রম্পট থেকে সেই মেনুটি চেষ্টা করতে হবে।
মিচিড

3

এটি একটি পুরানো প্রশ্ন, তবে আমি সম্প্রতি এই সম্পর্কে আগ্রহী ছিলাম। আমি এমন একটি পদ্ধতি পেয়েছি যার পুনরায় সংশোধন করার প্রয়োজন নেই adbd, তবে এটির প্রয়োজন নেই su(আমি চেইনফায়ার সুপারসু ২.৪৫ ব্যবহার করছি)।

ধরে নেওয়া bashহয় এটি অবস্থিত /system/bin/bash, এবং suএ রয়েছে /system/xbin/su, এটি মূলত এরকম কিছু:

  1. adb shell (একটি ইন্টারেক্টিভ শেল ব্যবহার করুন this এই প্রক্রিয়াটিকে ওয়ান-লাইনার হিসাবে চালিত করার ফলে যদি সমস্যা হয় তবে এডিবি কাজ বন্ধ করে দিতে পারে)
  2. mount -o remount,rw /system
  3. mv /system/bin/sh /system/bin/sh.bak
  4. echo -e '#!/system/bin/bash\n/system/xbin/su -mm -l -s /system/xbin/bash' > /system/bin/sh মনে রাখবেন যে আপনার পথগুলি পৃথক হতে পারে; ব্যবহার which bashএবং which suনিশ্চিত করা।
  5. chmod 777 /system/bin/sh
  6. শেল পরীক্ষার আগে বেরিয়ে: /system/bin/sh। আপনি যদি কোনো ত্রুটি পেলে, ব্যাকআপ অবস্থায় ফিরিয়ে নেওয়ার মাধ্যমে ত্রুটি বা প্রত্যাবর্তন ঠিক: cp /system/bin/sh.bak /system/bin/sh
  7. Ptionচ্ছিকভাবে পুনরায় মাউন্ট / সিস্টেম; বেশিরভাগ ডিভাইস স্বয়ংক্রিয়ভাবে এটি করবে: mount -o remount,ro /system

এবং তুমি করে ফেলেছ.

BASH- কে কেবল এসএইচ-তে সিলেক্ট করা কাজ করে না কারণ বাশ যখন এইভাবে ডাকা হয় তখন এসএকে এমুলেট করে।

যাইহোক, স্ট্রের দিকে একবার নজর রেখে, এটি bashrcযখন সিমলিংকৃত বেসকে 'শ - লগিন' নামে ডাকা হয় তখন এটি সন্ধান করার মতো মনে হয় । যদিও এটি স্ক্রিপ্টের মাধ্যমে "চেইনলোড" শেল ব্যবহার করা যেতে পারে, যেমন উপরে বর্ণিত adbdএসএইচকে হার্ডকোড করা হয়েছে above

যদি সমস্যা হয় এবং আপনি সমস্যাটি সমাধানের জন্য /system/bin/shADB তে কোনও শেল রাখবেন না (তবে সরানো হয়েছে) have যদি এটি হয় তবে আপনার কাছে কয়েকটি বিকল্প রয়েছে:

  • পুনরুদ্ধার করুন যা adbd(যেমন সিডাব্লুএম বা টিডব্লিউআরপি) রয়েছে এবং এটিতে একটি অ্যাডবি শেল খুলুন, / সিস্টেমে / বিন / শ.বাককে আবার / সিস্টেম / বিন / এস-তে অনুলিপি করতে।
  • ব্যাকআপটি অনুলিপি করতে অ্যাডবি ব্যবহার করুন: adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh নোট করুন যে এটি সমস্ত ডিভাইসে কাজ করবে না; কেউ কেউ এইভাবে অ্যাডাবিকে পুনরায় মাউন্ট / সিস্টেম আরডব্লিউ করতে দেয় না।
  • একটি টার্মিনাল এমুলেটর ব্যবহার করুন যা আলাদা শেল চালানোর জন্য সেট করা যেতে পারে; লক্ষ্য করুন যে বেশিরভাগ প্রথমে / সিস্টেম / বিন / শ চেষ্টা করবে এবং জোর করে বন্ধ করবে।

0

আপনার পিসিতে, একটি ব্যাশ বাইনারি পান এবং ওভাররাইট করুন /system/bin/sh। আমি এক এখানে

এই কোডটি অনুলিপি করুন:

git clone https://github.com/SuperDethByte/Bash-for-ARM.git        
cd Bash-for-ARM                
echo "Make sure your phone is plugged into your computer."          
sleep 5s                
echo "Remounting /system partition as r/w..."       
adb shell mount -o remount,rw /system          
echo "Making A Backup..."              
adb shell cp /system/bin/sh /system/bin/sh.bak         
echo "checking if backup was made..."          
if [ adb shell 'ls /system/bin/ | grep "sh.bak"' ]; then     
echo "pushing bash binary to android..."          
adb push bash /system/bin/sh       
echo "Remounting /system partition as r/o..."         
adb shell mount -o remount,ro /system          
echo "DONE"        
else         
echo "Backup Failed"           
echo "Remounting /system partition as r/o..."      
adb shell mount -o remount,ro /system     
fi   
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.