Tag: bash

我如何为每个ping结果添加时间戳?

Ping默认返回: 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms 有什么办法可以让它添加时间戳吗? 例如, Mon 21 May 2012 15:15:37 EST | 64 bytes from 203.173.50.132: icmp_seq=0 ttl=244 time=57.746 ms 我在OS X v10.7(狮子),似乎有一些BSD版本的平。

IF语句与括号和方括号之间的差异

在学习一些关于bash的知识的时候 ,我来看看使用if语句的四种方法: 单括号 – (…) 双括号 – ((…)) 单方形支架 – […] 双方括号 – [[…]] bash中括号和方括号有什么区别。

将时间戳记添加到BASH中的mv文件名

那么,我是一个Linux新手,我有一个简单的bash脚本的问题。 我有一个在运行时添加到日志文件的程序。 随着时间的推移日志文件变得巨大。 我想创build一个启动脚本,在每次运行之前重命名并移动日志文件,为每次运行程序有效地创build单独的日志文件。 这是迄今为止我所得到的: 引擎收录 DATE=$(date +"%Y%m%d%H%M") mv server.log logs/$DATE.log echo program 运行时,我看到: : command not found program 当我cd到日志目录并运行目录,我看到这个: 201111211437\r.log\r 这是怎么回事? 我假设有一些我缺less的语法问题,但我似乎无法弄清楚。 更新:感谢下面的shellter的评论,我发现这个问题是由于我正在编辑窗口中的Notepad ++中的.sh文件,然后通过ftp发送到服务器,在那里我通过ssh运行该文件。 在文件上运行dos2unix后,它可以正常工作。 新的问题:我怎样才能正确地保存文件,以避免每次我重新发送文件时执行此修复程序?

如何避免bash命令replace删除换行符?

为了加速一些bash脚本的执行,我想使用命令replace将一个命令的结果保存在一个variables中,但是命令replace将0x0A换行符replace为一个空格。 例如: a=`df -H` 要么 a=$( df -H ) 当我想进一步处理$a ,换行符会被一个空格replace,所有的行现在都在一行上,这对grep来说更加困难: echo $a 避免换行符被删除的简单技巧是什么?

在Python中运行bash脚本

我有以下代码的问题: callBash.py: import subprocess print "start" subprocess.call("sleep.sh") print "end" sleep.sh: sleep 10 我想在10秒后打印“结束”。 (我知道这是一个愚蠢的例子,我可以简单地睡在Python中,但这个简单的sleep.sh文件只是一个testing)

从输出中去除颜色

我有一些脚本产生的颜色,我需要摆脱这一点。 #!/bin/bash exec > >(tee log) # redirect the output to a file but keep it on stdout exec 2>&1 ./somescript 输出是(在日志文件中): java (pid 12321) is running…@[60G[@[0;32m OK @[0;39m] 我不知道如何把ESC字符放在这里,所以我把@放在了原位。 我将脚本改为: #!/bin/bash exec > >(tee log) # redirect the output to a file but keep it on stdout exec 2>&1 ./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" […]

“set -x”是做什么的?

我有一个shell脚本,其中包含以下行: [ "$DEBUG" == 'true' ] && set -x

你能阻止命令进入bash shell命令历史吗?

有没有办法阻止命令被添加到bash shell的命令历史? 我希望能够防止某些“危险的”命令被添加到历史logging中,例如“ rm -rf ~/some/dir ”,以便按下向上箭头不能访问命令。 这样,不可能不经意地重复其中的一个命令。 我之所以问,是因为我使用向上的箭头来访问shell历史中的先前的命令,而且经常发现自己打开了我认为是正确的命令的东西,只是意识到我正要做点什么愚蠢/烦人/危险。 我不喜欢在我的shell历史中浮现出来的想法,等着我踩到它们! (注意:我知道可以在HISTIGNORE中设置模式,但是可以在每个命令的基础上应用一些东西,这将会是一个好习惯,除非有一个聪明的方法来使用HISTIGNORE我错过了?)

bash:将stdout捕获到一个variables,但仍然显示在控制台中

我有一个bash脚本,它调用几个长时间运行的进程。 我想将这些调用的输出捕获到variables中,以便处理。 但是,由于这些是长时间运行的进程,所以我希望将rsync调用的输出实时显示在控制台中,而不是事后。 为此,我已经find了一种方法,但它依赖于将文本输出到/ dev / stderr。 我觉得输出到/ dev / stderr不是做事的好方法。 VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr) VAR2=$(rsync -r -t –out-format='%n%L' –delete -s /path/source1/ /path/target1 | tee /dev/stderr) VAR3=$(rsync -r -t –out-format='%n%L' –delete -s /path/source2/ /path/target2 | tee /dev/stderr) 在上面的例子中,我调用rsync几次,我想看看他们处理的文件名,但最后我仍然希望在一个variables的输出,因为我会稍后parsing它。 是否有一个“更干净”的方式来完成这个? 如果它有所作为,我使用Ubuntu 12.04,bash 4.2.24。

如何grep,排除一些模式?

我想find文件中有一些模式的发生和没有其他模式的行。 例如,我需要find包括loom在内的所有文件/行,除了那些gloom 。 所以,我可以用命令findloom : grep -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) 现在,我想searchloom除了gloom 。 但是,以下两个命令都失败了: grep -v 'gloom' -n 'loom' ~/projects/**/trunk/src/**/*.@(h|cpp) grep -n 'loom' -v 'gloom' ~/projects/**/trunk/src/**/*.@(h|cpp) 我应该怎么做才能达到我的目标? 编辑1:我的意思是loom和gloom是字符序列(不一定是单词)。 所以,我需要在命令输出中使用bloomberg ,而不需要ungloomy 。 编辑2:有我的期望的样本。 以下两行都在命令输出中: 我面对通过香的面纱而隐约可见的图标。 Arty在一个阴沉的日子里正在变冷 。 以下两行不在命令输出中: 这是阴郁的,可怕的 – 伟大的污泥。 在pyntit大厅的西南面