Articles of SH

不能创build/ dev / stdout:没有这样的设备或地址

我想通过节点运行一个shell命令并捕获stdout的结果。 我的脚本在OSX上正常工作,但不在Ubuntu上。 我已经将问题和脚本简化为以下节点脚本: var execSync = require('child_process').execSync, result = execSync('echo "hello world" >> /dev/stdout'); // Do something with result 结果是: / bin / sh:1:不能创build/ dev / stdout:没有这样的设备或地址 我试图用/dev/stdout /dev/fd/1replace/dev/stdout 我已经尝试将shell更改为bash … execSync('echo …', {shell : '/bin/bash'}) 就像我说的,上面的问题被简化了。 真正的脚本接受作为参数的结果应写入文件的名称,所以我需要通过提供对stdoutstream作为文件描述符(即/dev/stdout访问来解决此问题。 我怎样才能通过节点执行命令,同时给命令访问它自己的标准输出stream?

recursion地“规范化”文件名

我的意思是摆脱特殊字符的文件名等 我已经做了一个脚本,可以recursion重命名文件[http://pastebin.com/raw.php?i=kXeHbDQw]: 例如:之前: THIS is my file (1).txt 运行脚本之后: This-is-my-file-1.txt 好。 这里是: 但是:当我想要“完全”testing它,像这样的文件名: ¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÂÃÄÅÆÇÈÊËÌÎÏÐÑÒÔÕ×ØÙUÛUÝÞßàâãäåæçèêëìîïðñòôõ÷øùûýþÿ.txt áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&'()*+,:;<=>?@[\]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£.txt 它失败[http://pastebin.com/raw.php?i=iu8Pwrnr]: $ sh renamer.sh directorythathasthefiles mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or directory mv: cannot stat `./áíüűúöőóéÁÍÜŰÚÖŐÓÉ!"#$%&\'()*+,:;<=>?@[]^_`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ''“”•–—˜™š›œžŸ¡¢£': No such file or […]

如何获得在bash脚本中执行的命令的进程ID?

我有一个脚本,我想同时运行2个程序,一个是ac程序,另一个是cpulimit,我想先用“&”在后台启动C程序,然后得到C程序的PID,把它交给cpulimit,它也会在后台运行“&”。 我试过下面这个,它只是开始第一个程序,并从不开始cpulimit。 另外我运行这个作为一个启动脚本作为root用在arch linux中的systemd。 #!/bin/bash /myprogram & PID=$! cpulimit -z -p $PID -l 75 & exit 0

Linux的bash脚本循环

我有1.txt 2.txt和script.php 1.txt: a b c d 2.txt www rrr ttt yyy 我希望bash文件在Linux下执行这个命令: ./script.php -na -j www>>n_j.txt ./script.php -na -j rrr>>n_j.txt ./script.php -na -j ttt>>n_j.txt ./script.php -na -j yyy>>n_j.txt ./script.php -nb -j www>>n_j.txt ./script.php -nb -j rrr>>n_j.txt ./script.php -nb -j ttt>>n_j.txt . . 我有一个蝙蝠代码与wondows cmd工作..我想要一个代码,它可以使用Linux命令行 @ECHO OFF FOR /F "tokens=1 delims= " %%I IN (1.txt) […]

将两个或更多STDOUTredirect到一个STDIN

我想将两个程序的输出redirect到单个STDINpipe道,可能是以最有效的方式。 那可能吗?

如何在bash中间接地分配一个variables来从Standard In,File和执行输出中获取多行数据

我在这里和其他地方发现了许多片段,回答了这个问题的一部分。 我甚至设法以低效的方式在很多步骤中做到这一点。 如果可能的话, 我真的很想find执行这个任务的单行执行 ,而不是分配给一个variables,并复制它几次来执行任务。 例如 executeToVar () { # Takes Arg1: NAME OF VARIABLE TO STORE IN # All Remaining Arguments Are Executed local STORE_INvar="${1}" ; shift eval ${STORE_INvar}=\""$( "$@" 2>&1 )"\" } 总的来说,如果$ executeToVar SOME_VAR ls -l * #实际上会填充SOME_VAR和从其余参数中取出的ls -l *命令执行的输出。 但是,如果命令在最后输出空行,(对于例如- echo -e -n '\n\n123\n456\n789\n\n'应该在开始和结束处具有2个新行)这些被bash的子执行过程所剥夺。 我在其他类似的post中看到,通过在stream的末尾添加一个标记“x”来解决这个问题,例如将子执行转化为如下forms: eval ${STORE_INvar}=\""$( "$@" 2>&1 ; echo […]

如何在python中传递星号到模块“sh”?

我在Python中使用“sh”模块来调用Linux上的外部命令。 在我的具体情况下,我想称之为“du”命令,因为它比“手动”更有效。 不幸的是,下面的行不起作用: output = sh.du('-sx', '/tmp/*') 但是这确实有效: output = sh.du('-sx', '/tmp/') 如果我传递一个星号,我得到以下错误信息: 'ascii' codec can't encode character u'\u2018' in position 87: ordinal not in range(128) 有谁知道如何处理命令行参数中的星号? 根据要求,这里是堆栈跟踪: Traceback (most recent call last): File "./unittest.py", line 33, in <module> output = sh.du('-sx', '/tmp/*') File "/usr/local/lib/python2.7/dist-packages/sh.py", line 1021, in __call__ return RunningCommand(cmd, call_args, stdin, stdout, stderr) […]

如何从shell脚本中获取mongo数据库的集合确切列表

我想从mongo数据库中获取集合名称列表。 所以,我在shell脚本中使用以下命令: collections = mongo $dbName –eval "db.getCollectionNames()" 该命令的输出结果是 “MongoDB shell版本:2.2.0连接到:cm_v2 col1,col2,col3,col4” 我想只得到集合名称,如:col,col2,col3,col4。 那么,我应该如何从结果中删除类似版本的输出。

通过PHP执行.sh脚本

我有几个游戏服务器,我需要运行shell脚本进行frequality。 我想弄清楚如何通过同一台服务器上的网页来运行这些脚本。 这是一个Ubuntu专用服务器。 网站文件通过/var/www/… 。我需要手动运行的.sh文件位于/home/amservers/…/start.sh 。 我看了其他答案,我仍然无法弄清楚。 如何find文件并存储它,然后运行exec()?

如何通过shell脚本执行vim命令

嗨,我有一个情况 我写了一个shell脚本,我必须将input传递给vim 。 详细解释 在这里我已经写了我不能改变的shell脚本。 这是它的代码。 sudo vim /mnt/etc/{hosts,hostname,ports} 由于这个主机文件被打开,我们可以通过:n和类似的端口文件手动去主机名文件旁边。 但是我必须从我的.sh文件执行相同的操作。 另外我必须编辑端口文件,完成后我必须保存并完成:wq命令。 我该怎么做?