【问题标题】:How to run BASH script in my Android?如何在我的 Android 中运行 BASH 脚本?
【发布时间】:2011-12-27 00:44:34
【问题描述】:

我的相同 BASH 脚本在 Fedora/CentOS 中运行。

但我正在测试一个Android eee pad transformer

我有终端访问权限,我写了一个小测试脚本。但它不起作用,我该如何解决它?我做错了什么?

/data/data/berserker.android.apps.sshdroid/home $ cat test.sh 
#!/bin/bash
var=`ifconfig -a`;
echo $var;

/data/data/berserker.android.apps.sshdroid/home $ chmod +x test.sh 
/data/data/berserker.android.apps.sshdroid/home $ ./test.sh 
sh: ./test.sh: not found
/data/data/berserker.android.apps.sshdroid/home $ uname -a
Linux localhost 2.6.36.3-00004-g069b8b5 #1 SMP PREEMPT Wed May 11 22:14:22 CST 2011 armv7l GNU/Linux

/data/data/berserker.android.apps.sshdroid/home $ bash ./test.sh 
sh: bash: Permission denied

/data/data/berserker.android.apps.sshdroid/home $ ls -l /bin/bash
ls: /bin/bash: No such file or directory

/data/data/berserker.android.apps.sshdroid/home $ find / -name "bash"
find: /config: Permission denied
lots more.......
find: /proc/595/task/598/fd: Permission denied
......
find: /data: Permission denied
find: /root: Permission denied

跟进:

这是我现在可以使用的脚本:

#!/bin/sh
echo "hello wassup, run me simply as './test.sh'";

or

#!/bin/bash
echo "hello wassup, run me using 'sh ./test.sh'";

【问题讨论】:

  • @Ocaso Protal:见上文,全部透明粘贴。
  • 我距离成为一名安卓专家还差得很远,但这可能是内存占用和使用小外壳来节省闪存和内存空间的问题。 ls -l /bin/bash 显示什么?是符号链接吗?如果是,符号链接的目的地是什么?我认为 /bin/bash 是 shell 的符号链接,它不能完全符合 bash。
  • 您尝试过简单的“sh”脚本吗?而不是 /bin/bash 使用 /bin/sh - 看看会发生什么。 android 可能根本没有正确实现 bash。
  • chmod 在某些 Android 发行版上不接受 +x 。试试 chmod 777。

标签: android linux bash fedora bash4


【解决方案1】:

用脚本调用解释器时可能会起作用吗?

$ bash ./test.sh

我看到了,虽然它被指定为 #!/bin/bash 错误是由 sh 发布的 - 可能是它做错了。

更新

$ sh ./test.sh

【讨论】:

  • 好像没有bash解释器,默认使用sh。请尝试使用它: $ sh ./test.sh 。此外,您使用的 shell 解释器可能没有 bash 中的功能。
  • 但我想使用 BASH。就像我在 Fedora/Centos 中使用的方式一样。
  • 尝试找到它,例如用 $ which bash
  • 感谢我暂时使用你的方式 $sh ./test.sh 或者我也可以将上面的行更改为 /bin/sh 这样至少可以工作。但它需要如何成为 Android 非常令人不安。
【解决方案2】:

大多数 Android 设备都没有安装 bash 解释器。如果你真的需要在 Linux 和 Android 上运行脚本,你可以尝试使用 BusyBox 但这需要你的设备生根(并且可能会使你的保修失效)。尽管如此,我不知道 ifconfig 实用程序是否包含在 BusyBox 中。

我强烈建议您使用 Android SDK 编写一个应用程序来完成您想要完成的任何事情。

【讨论】:

  • 你的意思是,在我的 Fedora/CentOS 中使用 Android SDK?到远程 Android。
  • 不,我的意思是使用 Fedora/CentOS 上的 bash 脚本来做任何事情。使用带有 Android SDK 的 Java\C\C++ 在 Android 上复制该功能。
【解决方案3】:

在 Android 中,shell 位于 /system/bin/sh 而不是 /bin/sh,就像在大多数类 Unix 系统上一样。因此,即使您将#!/bin/bash 更改为#!/bin/sh,它仍然无法正常工作。你必须使用#!/system/bin/sh

Android 不是 GNU/Linux 发行版,因此您不能指望在 GNU/Linux 上运行的所有脚本也可以在 Android 上运行。

【讨论】:

  • 此信息不正确。我只是将脚本修改为 #!/bin/sh 就可以了。
  • 目前我正在将它与 #!/bin/sh 一起使用,并且可以正常工作。但是,如果 $sh ./test.sh 正如@Asten 提到的那样,那也可以。
  • 我尝试了#!/bin/sh,但我的第一个命令su 不起作用。修改为#!/system/bin/sh和viola,得到root授权提示!
【解决方案4】:

如前所述,Android 操作系统(直到并包括 4.0)不包括 BASH 解释器(只是 shell)。虽然 BusyBox 是一个很棒的工具,但我相信它只是一个结合了常用 UNIX 实用程序的精简功能版本的单个可执行文件,但实际上并不包含 BASH 解释器。

有关 BASH 解释器的 Android 编译版本,请参阅此论坛帖子: http://forum.xda-developers.com/showthread.php?t=537827

【讨论】:

    【解决方案5】:

    您可以安装Busybox,它为您提供了许多实用程序,如awk、文件等...和Terminal Emulator

    1. 创建一个以#!/system/bin/sh为第一行的shell文件(shebang)
    2. 现在将完成的脚本放在/system/xbin/system/bin 下,然后从终端模拟器运行它

    信息摘自这篇文章:HOW TO RUN SHELL SCRIPTS ON ANDROID DEVICES

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2022-01-05
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多