首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Shell EOF

Android Shell EOF
EN

Stack Overflow用户
提问于 2013-03-07 22:41:15
回答 4查看 2.3K关注 0票数 5

我为Android制作的脚本有一个小问题。我不能让“EOF”在“mksh”中工作。它在'sh‘和'bash’中运行得很好,但是由于'mksh‘正在成为Android中使用最多的,所以我真的需要它在所有方面都能工作。

代码语言:javascript
复制
cat <<EOF
  ... lines here ...
EOF

此示例将导致融合错误。

无法创建临时文件/sqlite_stmt_journals/mksh。(随机):没有这样的文件或目录

我见过其他人在这个问题上,但没有真正的解决办法。

EN

回答 4

Stack Overflow用户

发布于 2013-03-14 18:23:42

这个问题来自于/sqlite_stmt_journals曾经存在并且是一个世界可写的粘性目录,就像/tmp在普通Unix中一样,所以当我将mksh添加到Android时,我使用它作为标准TMPDIR。

最近的安卓安全政策禁止世界可写目录,完全。

我们( Android团队和我)已经意识到了这个问题,但还没有想出一个好的解决方案;在(自动)使用“用户”主目录之前,需要创建“用户”主目录,但一名谷歌员工告诉我,他们在队列中有一些东西。

在此之前,将TMPDIR设置为用户可写的内容。

这是Android环境的问题,而不是mksh本身的问题。

@朱利安·方德伦:你的Android设备很可能是那个目录还存在的时候。

在中,默认的TMPDIR是/data/local,至少对于根用户…是可写的。因此,现在只需将其设置为可写的内容(如果您正在运行脚本,则将其导出)即可。

票数 10
EN

Stack Overflow用户

发布于 2013-03-07 22:52:52

好吧,有一个显而易见的解决方案,如果不愉快的话:不要在这里使用docs;只需将每一行回显到一个临时文件。所以你的例子是:

代码语言:javascript
复制
echo ... first line ... > $tmpfile
echo ... subsequent lines ... >> $tmpfile
cat $tmpfile
rm $tmpfile

编辑:等等,什么?在我看来,这里的文档在mksh上运行得很好。在库存的Kindle上,mksh R39会发生以下情况(不要介意perl):

代码语言:javascript
复制
$ perl <<FOO
print "hi\n"
FOO
hi
$ 

您的例子也如我所期望的一样有效。

票数 2
EN

Stack Overflow用户

发布于 2015-01-06 07:24:59

1) (如果您拥有根权限:)

当您打开android时,如果您拥有该设备的根权限,那么就以root用户的身份运行亚行。

代码语言:javascript
复制
adb root

而不是仅仅

代码语言:javascript
复制
adb shell

这会解决你的问题。

2) --如果您可以修改android设备中的sh二进制文件,那么就修改它,使其能够找到路径

代码语言:javascript
复制
/data/local/tmp/

代码语言:javascript
复制
/data/local/atvc/  // In Motorola’s android device.

上面的目录有shell用户的读/写/执行权限。

3) 安装Busybox并作为 Busybox cat <<EOF运行

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档