我为 Android 制作的脚本有一个小问题。我无法让“EOF”在“mksh”中工作。它在 'sh' 和 'bash' 中运行良好,但由于 'mksh' 正在成为 Android 中最常用的,我真的需要它在所有方面都能正常工作。
cat <<EOF
... lines here ...
EOF
这个例子会导致休闲错误
can't create temporary file /sqlite_stmt_journals/mksh.(random): No such file or directory
我看到其他人遇到过这个问题,但没有真正的解决方案。
最佳答案
问题来自于/sqlite_stmt_journals 曾经存在并且是一个世界可写的粘性目录,就像/tmp 在普通的 Unix boxen 中一样,所以当我将 mksh 添加到安卓。
最近的 Android 安全政策完全禁止世界可写的目录。
我们(Android 团队和我)已经意识到这个问题,但还没有想出一个好的解决方案; “用户”主目录需要先创建,然后才能(自动)使用,但一位 Google 员工告诉我他们有一些东西在排队。
在那之前,将 TMPDIR 设置为您的用户可写的内容。
这是 Android 环境的问题,而不是 mksh 本身的问题。
@Julian Fondren:你的 Android 设备可能是那个目录还存在的时候。
在 AOSP git master 中,默认的 TMPDIR 是/data/local ,它至少对 root 用户是可写的……所以,现在只需将它设置为您可写的内容(如果您正在运行脚本,则将其导出)。
关于Android shell EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283220/