Esta é uma pergunta antiga, mas recentemente fiquei curioso sobre isso. Encontrei um método que não requer recompilação adbd
, mas requer su
(estou usando o Chainfire SuperSu 2.45).
Assumindo que bash
está localizado em /system/bin/bash
, e su
está em /system/xbin/su
, é essencialmente algo como isto:
adb shell
(use um shell interativo. Invocar esse processo como uma linha pode fazer com que o ADB pare de funcionar se houver um problema)
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
Observe que seus caminhos podem ser diferentes; use which bash
e which su
para ter certeza.
chmod 777 /system/bin/sh
- Teste o shell antes de sair:
/system/bin/sh
. Se você receber um erro, corrija o erro ou reverter, restaurando o backup: cp /system/bin/sh.bak /system/bin/sh
.
- Remontar / sistema opcionalmente; a maioria dos dispositivos fará isso automaticamente:
mount -o remount,ro /system
E você terminou.
Simplesmente ligar o BASH ao SH não funciona porque o bash emula o SH quando invocado dessa maneira.
No entanto, observando o strace, parece procurar um bashrc
quando um BASH vinculado é chamado como 'sh --login'. Embora isso possa ser usado para "carregar em cadeia" shells via script, como mencionado acima, a maneira como o adbd
SH é codificado é codificado.
Se houver um problema e você tiver removido (ou movido) o /system/bin/sh
ADB não terá um shell para ajudá-lo a corrigir o problema. Se isso acontecer, você tem algumas opções:
- Reinicie em uma recuperação que possui
adbd
(como CWM ou TWRP) e abra um shell adb para copiar /system/bin/sh.bak em / system / bin / sh novamente.
- Use adb para copiar o backup:
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
observe que isso não funcionará em todos os dispositivos; alguns se recusam a permitir que o adb remonte / rw do sistema dessa maneira.
- Use um emulador de terminal que possa ser configurado para executar um shell diferente; observe que vários tentarão / system / bin / sh primeiro e forçarão o fechamento.
sh
, nãobash
, quando eu uso adb para se conectar. Qual versão você está usando?