Beri bash i ebash / Говнокод #29276 Ссылка на оригинал

0

  1. 1
adb shell pm list packages -e|cut -d: -f2|sort|perl -ple '$="adb shell appops set $ AUTO_REVOKE_PERMISSIONS_IF_UNUSED ignore"' | bash

Реальный пример с Х-ра.

Запостил: nemyx nemyx, (Updated )

Комментарии (9) RSS

  • И не лень было. Можно было внутри одного шелла запустить и pm, и цикл с appops. И Перл тут не особо нужен.
    Ответить
    • Я бы так написал:
      adb shell 'for d in `pm list packages -e | cut -d: -f2`; do appops set $d AUTO_REVOKE_PERMISSIONS_IF_UNUSED ignore; done'

      Нормально?

      Можно было бы через xargs, но xargs в Андроиде тупой. А если запускать xargs на компе, получится говно из поста.
      Ответить
    • Автор использовал Перл только ради того, чтобы заменить символ в шоблоне на переменное значение. А поскольку Перла в его девайсе на Андроиде не оказалось, он его вызывал на компе, к которому подключен девайс, и поэтому adb shell джва раза.

      Интересно, как выглядят его команды, когда он обращается к серверу по ssh.
      Ответить
  • Что это и для чего (безотносительно какчества кода)?

    В Андроиде по умолчанию действует автоотзыв прав доступа, если приложением не пользовались N дней (чтобы пользователь заебался снова подтверждать манифест или чесал репу, почему приложение перестало работать). Код по задумке автора должен отключить автоотзыв прав у всех установленных приложений.
    Ответить
    • Ответ от "ИИ"
      ### Разбор команды по частям:
      
      1.  **`adb shell pm list packages -e`**
          *   `adb shell`: запускает команду внутри подключенного Android-устройства.
          *   `pm list packages`: команда пакетного менеджера, которая выводит список всех установленных приложений.
          *   `-e`: флаг, который показывает только те приложения, у которых **уже выданы** какие-либо разрешения (чтобы не тратить время на пустые пакеты).
      
      2.  **`| cut -d: -f2`**
          *   Вывод первой команды выглядит так: `package:com.android.chrome`.
          *   `cut -d: -f2` обрезает строку по разделителю `:` и берет вторую часть. В итоге остается только чистое имя пакета: `com.android.chrome`.
      
      3.  **`| sort`**
          *   Сортирует список имен пакетов по алфавиту.
      
      4.  **`| perl -ple '$="adb shell appops set $ AUTO_REVOKE_PERMISSIONS_IF_UNUSED ignore"'`**
          *   Это «магия» трансформации текста. Perl берет каждое имя пакета (например, `com.android.chrome`) и подставляет его в шаблон команды.
          *   На выходе из этого этапа получается огромный список строк вида:
              `adb shell appops set com.android.chrome AUTO_REVOKE_PERMISSIONS_IF_UNUSED ignore`
              `adb shell appops set com.example.app AUTO_REVOKE_PERMISSIONS_IF_UNUSED ignore`
          *   Параметр `ignore` говорит системе: «Игнорируй правило автоматического отзыва разрешений для этого приложения».
      
      5.  **`| bash`**
          *   Принимает весь этот сгенерированный список команд и **выполняет их** одну за другой.
      
      ---
      Ответить
    • Это где к читаттелю на ты обращались?
      Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8