我为Android制作的脚本有一个小问题。我不能让“EOF”在“mksh”中工作。它在'sh‘和'bash’中运行得很好,但是由于'mksh‘正在成为Android中使用最多的,所以我真的需要它在所有方面都能工作。
cat <<EOF
... lines here ...
EOF此示例将导致融合错误。
无法创建临时文件/sqlite_stmt_journals/mksh。(随机):没有这样的文件或目录
我见过其他人在这个问题上,但没有真正的解决办法。
发布于 2013-03-14 18:23:42
这个问题来自于/sqlite_stmt_journals曾经存在并且是一个世界可写的粘性目录,就像/tmp在普通Unix中一样,所以当我将mksh添加到Android时,我使用它作为标准TMPDIR。
最近的安卓安全政策禁止世界可写目录,完全。
我们( Android团队和我)已经意识到了这个问题,但还没有想出一个好的解决方案;在(自动)使用“用户”主目录之前,需要创建“用户”主目录,但一名谷歌员工告诉我,他们在队列中有一些东西。
在此之前,将TMPDIR设置为用户可写的内容。
这是Android环境的问题,而不是mksh本身的问题。
@朱利安·方德伦:你的Android设备很可能是那个目录还存在的时候。
在中,默认的TMPDIR是/data/local,至少对于根用户…是可写的。因此,现在只需将其设置为可写的内容(如果您正在运行脚本,则将其导出)即可。
发布于 2013-03-07 22:52:52
好吧,有一个显而易见的解决方案,如果不愉快的话:不要在这里使用docs;只需将每一行回显到一个临时文件。所以你的例子是:
echo ... first line ... > $tmpfile
echo ... subsequent lines ... >> $tmpfile
cat $tmpfile
rm $tmpfile编辑:等等,什么?在我看来,这里的文档在mksh上运行得很好。在库存的Kindle上,mksh R39会发生以下情况(不要介意perl):
$ perl <<FOO
print "hi\n"
FOO
hi
$ 您的例子也如我所期望的一样有效。
发布于 2015-01-06 07:24:59
1) (如果您拥有根权限:)
当您打开android时,如果您拥有该设备的根权限,那么就以root用户的身份运行亚行。
adb root而不是仅仅
adb shell这会解决你的问题。
2) --如果您可以修改android设备中的sh二进制文件,那么就修改它,使其能够找到路径
/data/local/tmp/或
/data/local/atvc/ // In Motorola’s android device.上面的目录有shell用户的读/写/执行权限。
3) 安装Busybox并作为 Busybox cat <<EOF运行
https://stackoverflow.com/questions/15283220
复制相似问题