如何在不将其写入文件的情况下执行完整的 shell 字符串?

How to execute a full shell string without writing it to a file?

我有一个 shell (.sh) 文件,它是多行的,里面有函数作为字符串,我想完全执行它而不需要将它写入 .sh 文件。

我相信这个错误是因为它里面有函数而不是每行只有一个命令。 有没有一种方法可以执行这样的 shell 的字符串而不需要将其写入磁盘并使用 ./file.sh?

您可以在 Kotlin 中这样做:

val result = "PowerShell -Command --YOUR COMMAND HERE-- ".execute().text.trim()

在 android 中实现此目的的最安全方法是:

  1. 将您的命令编码为 base64,然后应用
  2. 应用解码它们并执行它们的命令

这是一个代码示例:

val b64 = Base64.encode(allCmds.toByteArray(), Base64.DEFAULT)
                            .toString(Charsets.UTF_8).trim()
b64 = b64.replace("\n", "")
var exitValue = 0
try {
    p = Runtime.getRuntime().exec("su -c echo $b64 | base64 -d | sh")
    exitValue = p.waitFor()
} catch (e: Exception) {
    exitValue = 1
}

return exitValue // the value 0 indicates normal termination