Articles of bash

将正斜杠replace为用双引号括起来的双反斜杠

我拼命试图用双引号( "\\" )括起来的双反斜杠replace正斜杠( / ) 但 a=`echo "$var" | sed 's/^\///' | sed 's/\//\"\\\\\"/g'` 不工作,我不知道为什么。 它总是用一个反斜杠代替,而不是两个

如何让bashdate脚本返回相对于非当前时间的星期几?

使用bashdate,我可以得到它返回相对于当前时间一周的一天。 date –d='last Sunday' #Returns date of the Sunday before today 我也可以得到它相对于其他date返回一天 date –d='02/1/2012 -2 days' #Returns date two days before Feb. 1, 2012 但我怎么能得到它相对于一些非当前时间返回星期几? 我想要做的是: date –d='Sunday before 02/1/2012' #Doesn't work! I want Sunday before Feb. 1 如果可能的话,我甚至希望能够链接string,以便可以引用新date的相对date: # Should return 2 days before the Sunday before Feb. 1, 2012 date –d='Sunday before 02/1/2012 […]

将string拆分成bash中的数组

我正在寻找一种方法来在bash中分隔string中的string,并将这些部分放在一个数组中。 简单案例: #!/bin/bash b="aaaaa/bbbbb/ddd/ffffff" echo "simple string: $b" IFS='/' b_split=($b) echo ; echo "split" for i in ${b_split[@]} do echo "—— new part ——" echo "$i" done 给出输出 simple string: aaaaa/bbbbb/ddd/ffffff split —— new part —— aaaaa —— new part —— bbbbb —— new part —— ddd —— new part —— ffffff 更复杂的情况: #!/bin/bash c=$(echo […]

从vim发送代码到stata

我一直在使用Vim在Windows上编写Stata脚本一段时间。 我现在正在学习R,我想完全切换到Linux作为我的操作系统(我最近在我的笔记本电脑上切换到了Ubuntu)。 R在Windows和Linux下都可以正常工作,但是我仍然需要使用Stata。 在Windows中,我一直使用Stata用户提供的一个简单的AutoIt脚本将行/整个文件发送给stata进行评估。 这个脚本在Linux中不起作用。 这是剧本的样子 ; AutoIt v3 script to run a Stata do-file from an external text editor ; Version 3.1, Friedrich Huebler, fhuebler@gmail.com, www.huebler.info, 30 March 2009 ; Declare variables Global $ini, $statapath, $statawin, $dofile, $winpause, $keypause, $clippause ; File locations ; Path to INI file $ini = @ScriptDir & "\rundo.ini" ; […]

用可变的顶端编写一个bash for-loop

我经常使用众所周知的语法在bash中编写for循环: for i in {1..10} […] 现在,我正试图写一个顶部由variables定义的地方: TOP=10 for i in {1..$TOP} […] 我已经尝试了各种各样的parens,花括号,评估等,并且通常会返回一个错误的“错误替代”。 我怎么能写我的for循环,以便极限取决于一个variables,而不是一个硬编码值?

Bash匿名pipe道

当devise一系列命令来执行某个任务时,我遇到了匿名pipe道不像预期那样的问题。 由于我正在运行的原始命令太复杂了,所以在这里我已经创build了一个显示问题的例子(我知道所有这些命令基本上什么都没有做)。 此外,我使用PV来显示数据是否实际上从input复制到输出。 cat /dev/zero | pv > /dev/null 这按预期工作。 (将数据从/ dev / zero复制到/ dev / null) cat /dev/zero | tee /dev/null | pv > /dev/null 这也按预期工作(复制数据并将两个副本发送到/ dev / null) cat /dev/zero | tee >(pv -c > /dev/null) | pv -c > /dev/null 这个命令只有部分工作。 虽然从STDIN到STDOUT的拷贝仍然有效,(一个pv会在短时间内显示进度),但是整个命令会被匿名pipe道阻塞,而这个匿名pipe道并没有收到任何东西,因此其中一个输出不能被写入(我通过让它写入文件而不是/ dev / null来检查这一点)。 如果有人有一个想法,为什么这不起作用(如预期?)在bash中,我会很高兴的帮助。 PS:如果我使用zsh而不是bash,命令按预期运行。 不幸的是,这个需要运行的系统没有zsh,并且我没有办法在部署的系统上获得zsh。

Linux的头部/尾部有偏移量

有没有办法在Linux的要求头或尾,但有一个额外的logging偏移忽略。 例如,如果文件example.lst包含以下内容: row01 row02 row03 row04 row05 我使用head -n3 example.lst我可以得到1 – 3行,但如果我想要它跳过第一行,并获得第2 – 4行呢? 我问,因为一些命令有一个头可能不是在search结果内。 例如du -h ~ –max-depth 1 | sort -rh du -h ~ –max-depth 1 | sort -rh将返回主目录中按降序排列的所有文件夹的目录大小,但会将当前目录附加到结果集的顶部(即~ )。 头部和尾部手册页似乎没有任何偏移参数,所以也许有某种range命令,可以指定所需的行:例如range 2-10或什么?

netcat的Linux脚本在x小时后停止工作

我必须脚本: #!/bin/bash netcat -lk -p 12345 | while read line do match=$(echo $line | grep -c 'Keep-Alive') if [ $match -eq 1 ]; then [start a command] fi done 和 #!/bin/bash netcat -lk -p 12346 | while read line do match=$(echo $line | grep -c 'Keep-Alive') if [ $match -eq 1 ]; then [start a […]

Unix除了最后两个令牌之外,

我试图parsing特定目录中的文件名。 文件名格式为: token1_token2_token3_token(N-1)_token(N).sh 我需要使用分隔符'_'来剪切标记,除了最后两个标记之外,还需要使用string。 在上面的例子中输出应该是token1_token2_token3 。 令牌的数量不固定。 我已经试过用-f#- cut命令的选项来做,但没有find任何解决scheme。 有任何想法吗?

getopts不会连续调用两次?

由于某些原因,这些选项可以正常工作,第一次调用lib_progress_bar -c "@" -u "_" 0 100 ,但是在第二次调用之后,一切都是默认的,因为它看起来像getopts c:u:d:p:s:%:m: flag第二次不是真的,或者至less在我使用set -x时候永远不会执行 #!/bin/bash lib_progress_bar() { local current=0 local max=100 local completed_char="#" local uncompleted_char="." local decimal=1 local prefix=" [" local suffix="]" local percent_sign="%" local max_width=$(tput cols) local complete remain subtraction width atleast percent chars local padding=3 while getopts c:u:d:p:s:%:m: flag; do case "$flag" in c) completed_char="$OPTARG";; u) […]