如何在不将其写入文件的情况下执行完整的 shell 字符串?
How to execute a full shell string without writing it to a file?
我有一个 shell (.sh) 文件,它是多行的,里面有函数作为字符串,我想完全执行它而不需要将它写入 .sh
文件。
- 我尝试使用
Process process = Runtime.getRuntime().exec(commands)
和 ProcessBuilder
但它从未正确执行,我无法收到错误消息。
- 我也试过
su cat << EOF commands_here EOF
但也没完成
我相信这个错误是因为它里面有函数而不是每行只有一个命令。
有没有一种方法可以执行这样的 shell 的字符串而不需要将其写入磁盘并使用 ./file.sh
?
您可以在 Kotlin 中这样做:
val result = "PowerShell -Command --YOUR COMMAND HERE-- ".execute().text.trim()
在 android 中实现此目的的最安全方法是:
- 将您的命令编码为 base64,然后应用
- 应用解码它们并执行它们的命令
这是一个代码示例:
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
我有一个 shell (.sh) 文件,它是多行的,里面有函数作为字符串,我想完全执行它而不需要将它写入 .sh
文件。
- 我尝试使用
Process process = Runtime.getRuntime().exec(commands)
和ProcessBuilder
但它从未正确执行,我无法收到错误消息。 - 我也试过
su cat << EOF commands_here EOF
但也没完成
我相信这个错误是因为它里面有函数而不是每行只有一个命令。
有没有一种方法可以执行这样的 shell 的字符串而不需要将其写入磁盘并使用 ./file.sh
?
您可以在 Kotlin 中这样做:
val result = "PowerShell -Command --YOUR COMMAND HERE-- ".execute().text.trim()
在 android 中实现此目的的最安全方法是:
- 将您的命令编码为 base64,然后应用
- 应用解码它们并执行它们的命令
这是一个代码示例:
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