小编cda*_*rke的帖子

Android adb shell - ash还是ksh?

Android在线文档Android Debug Bridge说"Adb提供了一个灰壳".果然,如果我adb shell去AVD模拟器,我会得到灰烬,这基本上是一个简化的Bourne shell.

但是,如果我连接到几个远程设备,一个是HTC电话,另一个是华硕Transformer Prime平板电脑,它们都有一个版本的Korn shell,它提供:KSH_VERSION='@(#)MIRBSD KSH R39 2010/08/24'.虽然MIRBSD KSH不是一款成熟的AT&T Korn外壳,但它仍然比灰烬强大得多.

模拟器正在运行Jelly Bean,两个设备都在使用ICS.再做一点挖掘,看起来像是在姜饼中的灰烬,而在Honeycomb中则是mirbsd ksh.

那么,有人可以确认Android在线文档是错误的,并且模拟器运行的是过时的shell吗?还是供应商正在实施自己的?

android ksh adb ash

10
推荐指数
1
解决办法
4002
查看次数

bash和ksh之间的子shell差异

我一直认为子shell不是子进程,而是同一进程中的另一个shell环境.

我使用一组基本的内置函数:

(echo "Hello";read)
Run Code Online (Sandbox Code Playgroud)

在另一个终端:

ps -t pts/0
  PID TTY          TIME CMD
20104 pts/0    00:00:00 ksh
Run Code Online (Sandbox Code Playgroud)

所以,kornShell(ksh)中没有子进程.

输入bash,看起来行为不同,给出相同的命令:

  PID TTY          TIME CMD
 3458 pts/0    00:00:00 bash
20067 pts/0    00:00:00 bash
Run Code Online (Sandbox Code Playgroud)

所以,bash中的子进程.
从阅读bash的手册页来看,显然是为子shell创建了另一个进程,但是它伪造了$$,这是一个偷偷摸摸的.

bash和ksh之间是否存在这种差异,或者我是否正确地阅读了这些症状?

编辑:附加信息:strace -f在Linux上运行bash和ksh显示bash clone为sample命令调用两次(它不调用fork).所以bash可能正在使用线程(我试过,ltrace但核心转储!).KornShell既不叫fork,vfork也不clone.

linux bash shell scripting ksh

7
推荐指数
2
解决办法
5444
查看次数

在Python脚本中重试用户输入

我试图弄清楚,如果我在Python脚本中提交一个简单的错误,是否有办法"强迫"Python脚本不"反击"到bash环境中.

这是一个MWE(MWE.py)来说明这一点:

如果我在下面的MWE中按3,你怎么能告诉Python不要让我退出程序?

x = raw_input("Please input a number 1 or 2: ")
if (x == '1'):
    print '1'
elif (x == '2'):
    print '2'
#else:
    #print 'Neither 1 nor 2.'
Run Code Online (Sandbox Code Playgroud)

请注意,我的最后两行已注释掉.如果我取消注释它们,显然我会得到相应的print语句,程序将成功完成.但是,让我们假设我没有最后两行,并希望MWE.py"保持在Python模式"(可以这么说)而不是严厉地让我回到bash shell,从而迫使我从头开始重新运行python MWE.py.

有办法以某种方式实现这一目标吗?

显然,这是一个微不足道的MWE,但我试图理解这个原则:是否有可能在我提交输入错误之前返回我所呈现的最后一个提示(例如当我按下3时在此MWE中提交) .是否基本上有一种"通用的方式"可以回到x = raw_input("Please input a number 1 or 2: ")(或者在我输入错误之前给出的最新提示)?

这在需要在不同阶段进行多个用户输入的程序中显得特别重要.我不想从头开始.

python

3
推荐指数
1
解决办法
1082
查看次数

列出目录并查找是否以“.mp4”结尾的文件名

原问题:

a = [1, 2, 3, 4, 5, 6, 4]

print [True for i in a if i == 4]
Run Code Online (Sandbox Code Playgroud)

结果:

[True, True]
Run Code Online (Sandbox Code Playgroud)

我如何编码以打破第一个数字 4?

以下评论,编辑为:

我确实想列出一个包含这么多文件的目录。并查找文件是否以“.mp4”结尾。

python

1
推荐指数
1
解决办法
7449
查看次数

标签 统计

ksh ×2

python ×2

adb ×1

android ×1

ash ×1

bash ×1

linux ×1

scripting ×1

shell ×1