Articles of shell

如何在单独的进程中运行一个shell并获得自动完成? (python)

我有一个Linux应用程序,从一些设备获取inputstream。 这个input应该被引导到一个shell进程,以便它模拟给用户一个标准的shell。 到目前为止,我已经通过创build运行'/ bin / sh'的进程来完成它,并且我redirect了其input,输出和stderr,如下所示: import subprocess p = subprocess.Popen(shell=False, args=['/bin/sh'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) _make_nonblocking(p.stdout) # sets O_NONBLOCK _make_nonblocking(p.stderr) 当我只是一个通行命令,一切正常。 p.stdin.write('pwd\n') p.stdout.read() '/home/dave\n' 对于自动完成,我试图写: p.stdin.write('ls s\t') p.stdout.read() IOError: [Errno 11] Resource temporarily unavailable 我希望得到一个可能的完成列表,但没有任何反应,直到我把“\ N”在标准input。 (另外,stderr没有什么等待)。 我已经查看了telnetd代码,并看到使用pty。 我尝试使用pty.openpty()并将slave设置为stdin,但是这也不起作用。 应该怎么办? 更新:我用build议的-i参数。 现在我有一个问题,一旦我使用Popen,然后按ENTER键,python shell移动到后台,如下所示: >>> p = subprocess.Popen(shell=False, args=['/bin/sh', '-i'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) >>> <ENTER> [1]+ […]

如何忽略脚本中的stdininput

我有一个程序“myprogram”,它在控制台上运行时等待input密钥。 我们按下某个键后,退出。 我想在后台运行这个myprogram并忽略stdininput。 我有一个简单的脚本, sample.sh脚本 —— ./myprogram & exit 0 —— 但是当我跑步的时候, %sh sh sample.sh 一些如何myprogram得到一些input从标准input和退出..我想停止从任何input从标准input,所以即使在sample.sh退出myprogram继续运行。 请build议如何更新sample.sh脚本来实现此目的。

在bash中从python函数收集返回值

我正在实现一个将调用python脚本的函数/方法的bash脚本。 我想收集这个函数的返回值到调用bash脚本中的局部variables。 try1.sh包含: #!/bin/sh RETURN_VALUE=`python -c 'import try3; try3.printTry()'` echo $RETURN_VALUE 现在python脚本: #!/usr/bin/python def printTry(): print 'Hello World' return 'true' 关于删除bash脚本: $./tr1.sh Hello World 没有“真”或在那个地方任何其他types的回声标准输出所需。 另外一件事,我希望能够做的是,我的avtual python代码将有大约20-30个函数返回我的软件状态机的各种状态值,我会从bash脚本中调用这些函数。 在bash脚本中,我必须将这些返回值存储在本地variables中,这些variables将在调用bash脚本中实现的状态机逻辑中进一步使用。 对于每个值,我会做python -c'import python_module; python_module.method_name',这将重新枚举一次又一次,我不想要的状态机的定义状态。 我想避免使整个python脚本只用于调用一个函数。 那可能吗? 在这里可以想到什么可能的解决scheme/build议/想法? 我将不胜感激。 为了阐明我的意图,任务是让python脚本replace一部分bash脚本以提高可读性。 bash脚本实际上非常大(约15000行),因此不能完全由一个单独的python脚本replace。 所以可以被改进的部分可以被python替代。 另外,我曾想过在下面的评论中用Victor的build议来replace整个bash脚本,但是在我的情况下这是不可行的。 因此,我将不得不将状态机分成bash和python,其中python将有一些必需的方法返回bash脚本所需的状态值。 问候,优素福Husainy。

基于文件系统中的位置的Shell提示符

我必须在根文件系统下的三个主目录下工作 – home / username,project和scratch。 我想我的shell提示符显示我在哪些顶级目录。 这是我正在做的事情: top_level_dir () { if [[ "${PWD}" == *home* ]] then echo "home"; elif [[ "${PWD}" == *scratch* ]] then echo "scratch"; elif [[ "${PWD}" == *project* ]] then echo "project"; fi } 然后,我将PS1导出为: export PS1='$(top_level_dir) : ' 不幸的是,这不是我想要的。 我home :为我的提示,当我在我的家目录,但如果我切换到草稿或项目,然后提示不会改变。 我不明白bash脚本很好,所以我将不胜感激任何帮助来纠正我的代码。

为什么期望让过程打开它的STDERR?

我想为一个进程设置超时,这是我的shell。 我使用期望来做到这一点,以避免其他软件包的依赖。 test.sh #!/bin/bash # $1 timeout in seconds # $2 command timeout() { time=$1 shift # start the command in a subshell to avoid problem with pipes # (spawn accepts one command) -noecho command="/bin/sh -c \"$*\"" expect -c "set echo \"-noecho\";set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { […]

md5sum linux命令是否正常工作?

根据维基百科,一个空string的md5总和是d41d8cd98f00b204e9800998ecf8427e 我用我的md5库证实了这一点 但是,当我跑步 echo "" | md5sum 在我的linux shell中,我得到了68b329da9893e34099c7d8ad5cb9c940 – 实际上,我的散列都不匹配md5sum命令的输出。 有关这种差异的想法?

如何把所有的命令参数放在一个variables中

我想执行一个需要3个参数的shell脚本。 参数2包含一个带空格的string 我想把所有的参数放在一个像这样的variables中: Linux:~# kk="\"111\" \"222 222\" \"333\"" Linux:~# echo $kk "111" "222 222" "333" 现在,如果我调用一个函数: func() { echo —$1— echo —$2— echo —$3— } 用这种方法$ kkvariables func $kk 然后它会返回 Linux:~# func $kk —"111"— —"222— —222"— 我期待得到这个结果 —111— —222 222— —333— 如何解决这个问题,而不使用eval ? 我知道eval解决这个问题,但我不想使用它(因为如果我执行这样的调用很多时间需要时间)。

有没有办法看到一个path的所有中间目录的权限..?

我有一个文件path..是否有任何单一的命令来查看path中的所有中间目录的文件/目录权限..?

使用单行命令删除目录

如何使用单个命令删除多个目录? 是否可以在一个class轮中完成? 如果是,请帮助。 /osmf/mgmt/scheduler>ls -lrt total 22 drwx—— 2 root root 12288 Mar 26 2009 lost+found drwxr-xr-x 4 ctmagent controlm 1024 May 24 2010 ctmagent drwxrwxrwx 3 edwprod edw 1024 Dec 1 09:53 edi drwxrwxrwx 120 edwprod edw 5120 Dec 27 09:37 edw /osmf/mgmt/scheduler> 我可以使用单个命令删除edi和edw吗?

如何使用sed用shellvariablesreplace文件中的string

Geez,我尝试了MAN页面,还有几个post在这里。 我想我只是愚蠢的,因为我没有得到它。 我有一个JavaScript文件{VERSION}和{DISTRO},其中variablesstring值应该像这样replace。 var MyObject = { /** * @property {string} VERSION Holds the current version of the framework */ VERSION: '{VERSION}', /** * @property {string} DISTRO Holds the distrobution tag of the framework */ DISTRO: '{DISTRO}' }; 而这个命令运行我的shell。 无论我这样做,这是行不通的,或者我得到错误。 VERSION="0.9.0" DISTRO="Developer" OUT_CAT=$OUT_CAT_DEBUG ${OUT_CAT} | sed -i "s/{VERSION}/\$VERSION/" -e "s/{DISTRO}/\$DISTRO/" ${OUT_CAT} #sed -i "s/{VERSION}/$VERSION/" -e […]