Когда я подключаюсь к устройству с Cyanogenmod, у меня появляется хорошая оболочка bash, подсказка цвета и bashrc. Я не вижу символическую ссылку из / system / xbin / bash на / system / bin / sh. Как они устанавливают оболочку по умолчанию для bash вместо sh? Я просмотрел rc файлы, но ничего не нашел. Я хотел бы сделать то же самое на моей сборке Android, которая не Cyanogenmod.
Обновить
После переустановки с нуля с CM7 меня взяли на sh вместо bash. Теперь вопрос в том, как установить bash по умолчанию.
cyanogenmod
bash
Ravi
источник
источник
sh
,bash
когда я использую ADB для подключения. Какую сборку вы используете?Ответы:
Когда
adb shell
выполняется, сторона Android также запускает adb, который затем выполняется/system/bin/sh -
. Этот путь жестко запрограммирован вsystem/core/adb/services.c
:Если вы хотите изменить это на bash, вам придется перекомпилировать его.
Возможно выполнение некоторых команд из файла при запуске интерактивной оболочки. Как написано в
system/core/sh/main.c
,sh -
(обратите внимание-
на интерактивный режим) считывает из следующих файлов (в указанном порядке):/etc/profile
.profile
(относительно текущего каталога, это/.profile
дляadb shell
$ENV
(переменная окруженияENV
должна указывать на файл)Как
/etc/
и/
только для чтения, единственный способ загрузить что-то было путем установкиENV
. Вероятно, вы можете создать символическую ссылку с/etc/profile
на/data/profile
, установив/
чтение-запись (упражнение для читателя).источник
У меня не было моего Android прямо сейчас для тестирования, но с эмулятором терминала Android, если вы зайдете в меню, вы можете использовать опцию «Командная строка» или «Начальная команда».
источник
Это старый вопрос, но мне самому недавно было любопытно. Я нашел метод, который не требует перекомпиляции
adbd
, но он требуетsu
(я использую Chainfire SuperSu 2.45).Предполагая,
bash
что находится в точке/system/bin/bash
иsu
находится в точке/system/xbin/su
, это, по сути, что-то вроде этого:adb shell
(используйте интерактивную оболочку. Вызов этого процесса как однострочного может привести к прекращению работы ADB в случае возникновения проблемы)mount -o remount,rw /system
mv /system/bin/sh /system/bin/sh.bak
echo -e '#!/system/bin/bash\n/system/xbin/su -mm -l -s /system/xbin/bash' > /system/bin/sh
Обратите внимание, что ваши пути могут отличаться; использоватьwhich bash
иwhich su
быть уверенным.chmod 777 /system/bin/sh
/system/bin/sh
. Если вы получаете ошибку, исправить ошибку или восстановить путем восстановления резервной копии:cp /system/bin/sh.bak /system/bin/sh
.mount -o remount,ro /system
И вы сделали.
Простая символическая ссылка BASH на SH не работает, потому что bash эмулирует SH при вызове таким способом.
Однако, взглянув на strace, он, похоже, ищет,
bashrc
когда символическая ссылка BASH называется 'sh --login'. Хотя это можно использовать для «загрузки» оболочек с помощью скрипта, как уже упоминалось выше, способadbd
вызова SH жестко закодирован.Если есть проблема, и вы удалили (или переместили)
/system/bin/sh
ADB, у вас не будет оболочки, которая поможет вам решить проблему. Если это произойдет, у вас есть несколько вариантов:adbd
рекавери, которое имеет (например, CWM или TWRP) и откройте для него оболочку adb, чтобы снова скопировать /system/bin/sh.bak в / system / bin / sh.adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
обратите внимание, что это не сработает на всех устройствах; некоторые отказываются позволить adb перемонтировать / system rw таким способом.источник
На вашем компьютере установите bash-файл и перезаписайте его
/system/bin/sh
. У меня есть один здесь .Не стесняйтесь копировать этот код:
источник