【问题标题】:Using command echo in a .sh file doesn't works in TWRP recovery. How to do to display message using script .sh in TWRP在 .sh 文件中使用命令 echo 在 TWRP 恢复中不起作用。如何在 TWRP 中使用脚本 .sh 显示消息
【发布时间】:2019-07-25 11:41:51
【问题描述】:

我试图了解为什么在 sh 文件中使用 echo 命令不起作用。 我用 7-zip 制作了一个可刷写的 zip,它包含一个 shell 脚本。 更新脚本是

ui_print("");
run_program("/sbin/busybox", "mount", "/system");
run_program("/sbin/busybox", "mount", "/data");
package_extract_dir("test", "/tmp");
set_perm(0, 0, 0777, "/tmp/test.sh");
run_program("/tmp/test.sh");
delete_recursive("/tmp");
unmount("/system");
unmount("/data");

我的 test.sh 是这样的:

    #!/sbin/sh

   rm -rf /system/app/YouTube
   echo "Delete Youtube"

test.sh 删除 Youtube 文件夹,但 echo 命令不起作用。

我使用 TWRP 3.2.3.0 恢复。

我知道命令可以回显,因为我在 recovery.log 中看到它

【问题讨论】:

    标签: android sh recovery


    【解决方案1】:

    你需要使用正确的shebang

    #! /bin/bash
    

    Bash 有一个内置的 echo 命令。如果标准 echo 二进制文件不起作用,您可以利用它

    【讨论】:

    • 好吧,您可能需要了解必须先安装 /bin/bash 而不是投票。作为替代方案,请尝试 echo "Delete Youtube" > file 然后检查文件是否已创建并且“cat 文件”为您提供了您的字符串。如果是这样,则 echo 命令没有问题。只是你看不到它在哪里打印,因为它在单独的 shell 中运行。
    • 我不会反对你的回答
    【解决方案2】:

    TWRP 恢复将 echo 重定向到日志文件; stdout 和 stderror 被重定向到日志。

    因此,如果我们想在屏幕上显示消息,我们必须创建一个函数将其重定向到正确的文件描述符。 我从 chainfire 的 supersu 中找到了这段代码,它完全符合我的要求

    #!/sbin/sh
    
    OUTFD=1
    readlink /proc/$$/fd/$OUTFD 2>/dev/null | grep /tmp >/dev/null
    if [ "$?" -eq "0" ]; then
      # rerouted to log file, we don't want our ui_print commands going there
      OUTFD=0
    
      # we are probably running in embedded mode, see if we can find the right fd
      # we know the fd is a pipe and that the parent updater may have been started as
      # 'update-binary 3 fd zipfile'
      for FD in `ls /proc/$$/fd`; do
        readlink /proc/$$/fd/$FD 2>/dev/null | grep pipe >/dev/null
        if [ "$?" -eq "0" ]; then
          ps | grep " 3 $FD " | grep -v grep >/dev/null
          if [ "$?" -eq "0" ]; then
            OUTFD=$FD
            break
          fi
        fi
      done
    fi
    
    ui_print() {
      echo -n -e "ui_print $1\n" >> /proc/self/fd/$OUTFD
      echo -n -e "ui_print\n" >> /proc/self/fd/$OUTFD
    }
    

    要显示消息,只需使用 ui_print "message..."

    【讨论】:

      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      相关资源
      最近更新 更多