Articles of bash

Ansible&rbash

我想pipe理一些运行/bin/rbash的设备作为/bin/rbash的默认shell。 问题是Ansible总是试图执行一个rbash根本不喜欢的命令列表: umask 77 && mkdir -p \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\" && echo \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\" 任何想法我怎么能避免这个命令? 澄清:我想更改Ansible使用的shell,并且只有一个用户可用。

GCC从Bash脚本编译结果

嗨,我不是真正stream利的bash shell脚本,我做了一些编译使用由bash脚本执行的gcc,我怎么知道(检查)如果编译成功或不成功? 任何例子?

正则expression式负面匹配的麻烦

我一直在试图想出一个正则expression式匹配string基于特定的文件名,我希望有一个正则expression式忍者(我会省略xkcd链接的时间)在那里谁可以帮助。 我需要匹配以“.htm”或“.html”结尾的任何string,不是(负面匹配),紧接着是“msg-”,后跟4-16位数字或连字符。 string的开始可以是任何长度或内容。 这是我迄今为止的尝试: (?!msg-[0-9-]{4,16})\.html?$ 但是,这似乎并不奏效。 部分问题是先行匹配 – 我想匹配整个string,如果它符合这些标准,而不是不匹配的string的第一部分。 任何build议,将不胜感激。 万一它的味道很重要,这是Debian上的一个bash脚本。 编辑: 这里有一些string应该匹配正则expression式 the-quick-brown-fox-jumped-over-the-lazy-dog.html # ends with .html but no digits/hyphens just prior wdihwi94uq239ujdf23yefh02msg-2-8.htm # digit/hyphen count between 'msg-' and '.html' is below 4 ohdf23890yo4c89uwmsg-999-24j345.html # non-number/hyphen in chars between 'msg-' and '.html' 这里有一些不应该匹配正则expression式的string: kh3j42he2-dwfascn233=feufefask0msg-34535-355 # does not end with '.htm'/'.html' 395-u78{efihighqwioh9msg-8455-212.html # ends with […]

每天执行bash文件? (OS = UNIX)

我想在12:30每天执行bash文件,例如做备份的东西,我可以做到这一点? 和其他一个月? 操作系统是Unix

尾-f,然后退出匹配的string

我想configuration一个启动脚本,它将启动tomcat,监视string“Server startup”的catalina.out,然后运行另一个进程。 我一直在尝试tail -f与grep和awk的各种组合,但还没有任何工作。 我遇到的主要问题似乎是在grep或awk匹配string后迫使尾部死亡。 我简化了下面的testing用例。 test.sh is listed below: #!/bin/sh rm -f child.out ./child.sh > child.out & tail -f child.out | grep -q B child.sh is listed below: #!/bin/sh echo A sleep 20 echo B echo C sleep 40 echo D 我看到的行为是,grep在20秒后退出,但是尾巴会再花40秒死亡。 我明白为什么会发生这种情况 – tail只会注意到,在写入数据的时候pipe道已经不存在了,只有当数据被附加到文件时才会发生。 这是由尾巴是缓冲数据和输出B和C字符作为一个单一的写(我证实了这一点)的事实复合。 我试图用我在其他地方find的解决scheme来解决这个问题,例如使用unbuffer命令,但是这并没有帮助。 任何人有什么想法如何得到这个工作,我期望吗? 或者等待成功的Tomcat开始的想法(考虑等待TCP端口知道它已经开始,但是怀疑这会变得更复杂,现在我正在尝试做)。 我已经设法让awk在比赛中做“killall tail”,但是我对这个解决scheme并不满意。 注意我试图让这个在RHEL4上工作。

奇怪的爆炸(历史bash扩展)

在bash中: $ a=1 $ echo $a 1 $ echo "$a" 1 但: $ echo ! ! $ echo "!" bash: !: event not found 为什么在“回声!”,bash不扩大。

Shell脚本来更改用户的uid

我有一个文件(users_uid)与用户和uid是两个参数,如下所示: assds 611 dsdsd 612 xyzx 613 rerer 614 这些用户存在于机器中。 我想将每个用户的uid更改为给定用户名的那个值。 我知道我可以使用usermod -u <uid> <user>来修改uid。 但我不知道如何读取文件中的两个值,并使用usermod命令将它们作为2个参数放在for循环中。

Bash脚本启动一个进程,grep一行,然后杀死它

我正在寻找没有任何种类的–version选项的应用程序的版本号。 我正在寻找一个bash脚本,将开始这个过程(它运行,直到死亡),grep它的版本号,然后杀死它。 就像是: ./server | grep version | kill $PID 那可能吗?

/ usr / bin /和/ usr / local / bin之间的linux PATH问题

环境: linux新手:) tmux 1.1是使用apt-get安装的 tmux 1.6是从源代码下载,configuration,构build和安装的 使用apt-get删除了tmux 1.1 问题: 从path运行tmux尝试从/ usr / bin而不是/ usr / local / bin运行 DEETS: wget http://iweb.dl.sourceforge.net/project/tmux/tmux/tmux-1.6/tmux-1.6.tar.gz tar xvf tmux-1.6.tar.gz cd tmux-1.6/ sudo apt-get install libevent-dev sudo apt-get install libncurses5-dev ./configure make make install ./tmux #version 1.6 worked perfectly cd ~ tmux #ran old version as expected sudo apt-get remove tmux […]

BASH:将程序绑定到另一个程序

我想创build一个运行两个程序的脚本。 这一部分很简单,但有一个问题:如果第一个退出,我想杀了第二个。 我怎样才能做到这一点? 编辑 在另外一个退出之后,我试图通过它的PID来杀死程序,但是程序是hamster-time-tracker ,这是一个立即退出的Python应用程序,显然是产生了另一个进程。 我怎样才能解决这个问题? 有没有办法让另一个PID产生? 编辑2 弄清楚了。 我必须运行python /usr/bin/hamster-time-tracker而不是hamster-time-tracker ,并保持运行。