Articles of bash

Bash在后台运行一个函数

这里有一个相对简单的问题。 我需要在bash中的后台运行一个函数。 通常我会这样做: FUNCTION & 但事情比这更复杂一点。 我有以下一行文本数据库中的每个logging运行主要function。 我无法真正编辑这些代码,而没有大幅度改变整个项目的其余部分,但我仍然接受新的想法。 cat databases/$WAN | grep -v \# | while read LINE; do MAIN; done 我想在后台为每个logging产生一个新的terminal,做一个并行types的处理,使事情变得更快。 主要需要一分钟来处理每条logging。 但是这不起作用。 cat databases/$WAN | grep -v \# | while read LINE; do MAIN &; done 有什么build议么? *更新* 感谢所有的答复。 让我看看我能否回答一些这些问题。 gniourf_gniourf – 是的,我知道使用这样的猫是错误的。 这是早期的,关键的代码,所以我还没有更新它。 我现在读了大部分事情的while循环。 我将最终修复它。 你可能是正确的语法。 当我这样分手时,事情似乎现在起作用了: cat databases/$WAN | grep -v […]

理解sed命令中的正则expression式

我正在学习Sed,我一直在敲我的脑袋,理解这个命令一个小时,下面是我书中的例子: $ sed -n -e '/^[^|]*|[^|]*|56/w dpt_56' -e '/^[^|]*|[^|]*|89/w dpt_89' tel2.txt $ cat dpt_56 Karama Josette|256 rue de la tempete|56100|Lorient|85.26.45.58 Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|85/56/45/58 $ cat dpt_89 Joyeux Giselle|12. rue de la Source|89290|Vaux|45.26.28.47 她是我所理解的: – 这个命令的目的是在dpt_56文件中存储来自56 …区的人的行,对于dpt_89的89区也是如此。 我不明白的是“|”的目的或效果 和“^”字符在正则expression式=>什么做^[^|]*|[^|]*|56是什么意思? 我所看到的只是“select不以零次或几次开始的每一行”|“或者有几次没有时间”|“但是我感到困惑。

如何在bash中拒绝空数组索引

我写了这样的bash: #!/bin/bash GAP=1 Out=$1 ResultFile=$2 len=`wc -l $Out | awk '{print $1}'` eval "(COMMAND) &" pid=$! i=0 while kill -0 $pid; do if [ -N $Out ]; then newlen=`wc -l $Out | awk '{print $1}'` newlines=`expr $newlen – $len` tail -$newlines $Out > temp IP=( $(sed -n '<SomeThing>' temp) ) host=${IP[$i]} echo "exit" | nc […]

bash – wget -N如果其他值检查

我正在使用一个bash脚本,只有当远程时间戳与本地时间戳不同时,才从FTP站点获取文件。 放入文件后,通过samba(smbclient)将文件复制到另外3台计算机上。 一切正常,但即使wget -N ftp://insertsitehere.com返回一个值,远程文件不新的文件副本。 检查脚本输出的最佳方法是什么,以便只有从FTP中取出新版本才会发生复制? 理想情况下,我想复制到计算机来保存时间戳,就像wget -N命令一样。 这里是我所拥有的一个例子: #!/bin/bash OUTDIR=/cats/dogs cd $OUTDIR wget -N ftp://user:password@sitegoeshere.com/filename if [ $? -eq 0 ]; then HOSTS="server1 server2 server3" for i in $HOSTS; do echo "Uploading to $i…" smbclient -A /root/.smbclient.authfile //$i/path -c "lcd /cats/dogs; put fiilename.txt" if [ $? -eq 0 ]; then echo "Upload to $i […]

如何在Linux启动时自动启动基于Gradle的Java应用程序/守护进程?

我有一个基于Gradle的Java应用程序。 该应用程序实际上是一个守护进程。 在我的本地盒子上,我可以运行以下命令启动守护进程: > gradle run 这很好,但是我需要的是在主机重启时启动守护进程的方法。 我试图让这个在EC2实例上工作。

可执行while循环:没有这样的文件或目录

我想写一个简单的bash脚本迭代可执行文件的input参数。 有问题的文件有两个参数。 以下脚本工作,在包含.sh文件和.exe文件的目录中运行terminal: #!bin/bash ./exec 1000 1 但是,以下不: #!bin/bash n=1 while [ $n -le 50 ] do ./exec 1000 $n n=$(( n+1 )) done 而是返回错误 script.sh:第5行:./exec 1000 1:没有这样的文件或目录 script.sh:第5行:./exec 1000 2:没有这样的文件或目录 等等。 这意味着循环正在发生,但我不明白为什么突然找不到可执行文件。 我正在运行Ubuntu 14.04。

Shell脚本以recursion方式循环访问目录并打印重要文件的位置

所以我正在尝试编写一个命令行shell脚本或一个shell脚本,它们可以通过一个目录,所有文件和某些文件的子目录recursion循环,然后将这些文件的位置打印到一个文本文件中。 我知道这可以使用BASH命令,如find , locate , exec和> 。 这是我迄今为止。 find <top-directory> -name '*.class' -exec locate {} > location.txt \; 这虽然不起作用。 任何BASH,Shell脚本专家都可以帮我解决吗? 谢谢您阅读此篇。

是否值得在bash脚本中编写代码或者应该使用一些更高级的编程语言?

我尝试在bash脚本中编写一些我的任务,这是非常不方便和维护,发现错误是非常困难的。 这个句法和一些'60 – 70年代的编程语言相似。 至less脚本真的很快。 当我使用Ruby来完成同样的任务时,程序更短,更容易制作。 不过,我在这里看到很多针对bash脚本的问题。 是否值得在bash脚本中编写代码,还是应该使用一些更高级的编程语言,比如Ruby,Python或者Perl?

获取父节点的最后一个命令的退出状态

如果我有一个bash脚本,如下所示: some_command . some_bash 和some_bash看起来像这样: if [ "$?" != "0" ] then do_something else do_something_else fi 我期望在父环境( . )中执行的some_bash将得到父节点some_command的退出状态( $? )。 但事实并非如此。 我猜测它正在成功调用自己的退出状态,这总是正确的。 有没有办法绕过这个,除了some_bash $? if [ "$1" != "0" ] ?

“无法统计远程文件:没有这样的文件或目录”:在shell脚本中使用FTP从* nix到Win

我正在使用Bash脚本通过FTP备份我的web文件。 正如标题所说,我有一个Ubuntunetworking服务器,并备份到Windows机器。 我在Windows机器上有一个ssh程序和FileZilla Server,并且可以将SSH和SFTP放入它。 脚本的核心是这样的: SRCDIR="C:\\Users\\Tech1\\testserverbackup" DATAIN="/var/www/html/" FILENAME="-r *" sshpass -e sftp -oBatchMode=no -b – ${USER}@${LANHOST} << EOF cd ${SRCDIR} lcd ${DATAIN} mkdir $(date -I) cd $(date -I) put ${FILENAME} bye echo made it EOF 其他的变数是有点敏感的,所以我不想张贴,但凭证已经为我工作到目前为止。 我得到的错误是这样的: sftp> cd C:\Users\Tech1\testserverbackup Couldn't stat remote file: No such file or directory 我已经ssh进入文件夹和sftp'd,所以我不知道是什么问题。 AFAIK,cd是本地windows命令,不仅仅是FTP命令。 任何想法出了什么问题? 谢谢。