Articles of shell

awk / sed:在特定块号的最后一行之前插入文件内容

给定是两个文件,第一个是Apacheconfiguration文件: $ cat vhosts-ssl.conf <VirtualHost *:443> vhost 1 foobar 1 foobar 2 barfoo 1 barfoo 2 </VirtualHost> <VirtualHost *:443> vhost 2 foobar 2 barfoo 1 foobar 1 barfoo 2 </VirtualHost> <VirtualHost *:443> vhost 3 foobar 1 barfoo 1 foobar 2 barfoo 2 </VirtualHost> <VirtualHost *:443> vhost 4 foobar 1 foobar 2 barfoo 1 barfoo 2 […]

从Java触发shell脚本的最佳方法

我有一个我想从J2EE Web应用程序触发的shell脚本。 该脚本做了很多事情 – 处理,FTP等 – 这是一个遗留问题。 运行需要很长时间。 我想知道什么是最好的方法。 我希望用户能够点击链接,触发脚本,并向用户显示一条消息,说明脚本已经启动。 我希望HTTP请求/响应周期是瞬时的,不pipe我的脚本需要很长时间才能运行。 我可以想到三个select: 在处理用户点击的过程中产生一个新的线程。 但是,我不认为这符合J2EE规范。 向HTTP响应stream发送一些输出并在触发脚本之前提交它。 这给出了HTTP请求/响应循环已经完成的错觉,但实际上处理请求的线程仍然在那里等待shell脚本完成。 所以我已经基本上劫持了容器HTTP处理线程为我自己的目的。 创build一个包装脚本,在后台启动我的主脚本。 这将使请求/响应周期在容器中正常完成。 以上所有将使用servlet和Runtime.getRuntime()。exec()。 这在Java 1.4.2上使用Oracle的OC4J应用服务器在Solaris上运行。 请问有没有人有任何意见哪个是最简单的解决scheme,为什么? 还是有没有人有更好的方法? 我们已经有了Quartz,但是我们不希望将shell脚本重新实现为Java进程。 谢谢。

C Minishell添加pipe道

所以我正在制作一个UNIX minishell,并试图添加pipe道,所以我可以做这样的事情: ps aux | grep dh | grep -v grep | cut -c1-5 不过,我在缠绕pipe道部分时遇到了麻烦。 我把所有的“|” 字符为0,然后将每行作为普通线路运行。 但是,我试图转移输出和input。 一个命令的input需要是前一个命令的输出,一个命令的输出需要是下一个命令的input。 我正在做这个使用pipe道,但是我不知道在哪里调用pipe()以及在哪里closures它们。 从主处理函数processline()中,我有这样的代码: if((pix = findUnquotChar(line_itr, '|'))) { line_itr[pix++] = 0; if(pipe (fd) < 0) perror("pipe"); processline(line_itr, inFD, fd[1], pl_flags); line_itr = &(line_itr[pix]); while((pix = findUnquotChar(line_itr, '|')) && pix < line_len) { line_itr[pix++] = 0; //? if(pipe […]

比较bash脚本中的md5和

我试图用md5sum比较bash脚本中的两个文件。 目标是使用一个文件的.md5来检查另一个文件的md5sum 。 我的谷歌search如何以正确的方式做到这一点,并没有告诉我如何做到这一点。 烧掉电子邮件就像你期望的那样工作。 现在我试图让它在失败而不是成功的情况下发送一封电子邮件。 也许列出从.md5文件收到的结果和损坏文件的实际md5sum。 我会解决这个问题,最终,但是这有点令人困惑,因为我试图弄清楚我要去哪里错了。 Shellcheck指出代码看起来不错,但我没有得到我期望得到的结果。 几个StackOverflow链接,我检查了一下,看看是否可以工作: 一 二 这里是我的bash脚本的内容,它的原始forms: #!/bin/bash cd /home/example/public_html/exampledomain.com/billing/system/ || exit rm -rf GeoLiteCity.dat curl -L https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gunzip > GeoLiteCity.dat curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | gunzip > GeoLite2-City.dat curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5 md5sum GeoLite2-City.dat > md5sum.txt file1="md5sum.txt" file2="GeoLite2-City.md5" if [ "`cat $file1`" != "`cat $file2`" ]; then mail -s […]

长时间运行的PHP脚本在通过exec()调用时停止,但在通过CLI调用时结束

我有一堆需要很长时间才能完成的脚本。 其中一些可能需要长达20分钟。 有一个执行这些PHP脚本的Bash脚本。 当我以root的身份通过CLI调用这个Bash脚本时,所有的PHP脚本都没有任何问题。 但是当我用PHP的exec()函数通过浏览器调用Bash脚本时,脚本在7/8分钟后突然停止,而不会引发任何错误。 对于通过Apache / PHP执行的进程或脚本可以运行的时间是否有一定的限制? 我试过了: set_time_limit(0) exec('nohup /path/to/bashscript') exec('/path/to/bashscript | at now') 最后两个尝试过的解决scheme已经被长期运行脚本有问题的其他人推荐,但是它根本没有帮助我。 注意:执行PHP脚本的Bash脚本是CakePHP的控制台应用程序。 我必须通过这个Bash脚本执行PHP脚本来利用CakePHP的所有function(模型,shell方法等)。 我需要能够通过浏览器调用Bash脚本,并让它在后台运行。 服务器是VPS,并安装了WHM / cPanel。

我怎样才能sorting在Linux Bash shell中的string数组?

例如,数组是 link2_pathname link1_pathname link3_pathname 我怎样才能得到像下面的数组。 link1_pathname link2_pathname link3_pathname 提前感谢!

shell如何处理无限循环

无论何时我需要限制shell命令输出,我使用较less的分页结果: cat file_with_long_content | less 这工作得很好,但是我很好奇,即使输出永远不会结束,仍然可以工作,请考虑在inf.sh文件中使用以下脚本: while true; do date; done 然后我跑 sh inf.sh | less 而且它仍然可以对结果进行重新分页,所以说pipe道输出结果而不是等待命令完成才能输出结果是正确的吗?

Shell脚本问题,包含空格的文件名

我知道处理文件名空间的一种方法是用单引号括起文件名:“'”。 为什么下面的代码叫做“echo.sh”,在包含带空格的文件名的目录下工作,但程序“ls.sh”不起作用,唯一的区别是'echo'被'ls'replace? echo.sh #!/bin/sh for f in * do echo "'$f'" done 生产 : 'ABC' “高清” 'echo.sh' 'ls.sh' 但是,“ls.sh”失败: #!/bin/sh for f in * do ls "'$f'" done 生产 : ls:不能访问'ab c':没有这样的文件或目录 ls:不能访问'de f':没有这样的文件或目录 ls:不能访问'echo.sh':没有这样的文件或目录 ls:不能访问'ls.sh':没有这样的文件或目录

我想要一个shell脚本是可执行的,但不可读

我创build了一个脚本,我希望我们的共享系统上的其他用户执行但不能读取。 我将所有的权限设置为可执行权限,但撤销了R / W权限。 —x–x–x 1 dilletante staff 0 2013-04-02 11:42 expect.sh 然而脚本不能执行…原因很简单.. 解释器也需要读取脚本 我想要一个解决方法,如果有的话……我可以将它embedded到一些编译语言中。那可以工作吗? 如果是的话,你能指出我可以学习如何做的资源..

freeTDS bash:在Microsoft SQL Server中执行sql查询

我可以使用freeTSD和命令行通过Mint Linux VM连接到Microsoft SQL Server 2008实例,以在其上执行sql语句。 现在我想在bash脚本中自动化这个。 我能够成功login我的bash脚本: TDSVER=8.0 tsql -H servername -p 1433 -D dbadmin -U domain\\Administrator -P password 然后我有我的SQL查询: USE dbname GO delete from schema.tableA where ID > 5 GO delete from schema.tableB where ID > 5 GO delete from schema.tableC where ID > 5 GO exit 这在通过freeTSD命令行手动执行时有效,但不能在我放入bash文件时使用。 我跟着这个post: freeTSD&bash 。 这是我的bash脚本示例: echo […]