Articles of bash

等到TCP套接字在bash中可用

Helli, 我有一个脚本,等待一段时间,直到机器(被调配)出现,然后连接到SSH和执行一些东西。 我为此使用“睡眠”。 我想改变我的脚本主动检查端口在一个bash循环,当它准备好(sshd启动并接受连接),它会继续。 怎么做? 是否有一个UNIX命令能够告诉我,如果TCP服务器端口是响应?

如何删除文件夹名称和文件名称的“最终空格”?

我有600GB的Mac用户数据,保存在格式化为HFS +的磁盘中。 很多文件夹和文件名都包含“最终空格”。 我不知道用户如何插入它们,但结果是通过Samba,一个名为“Customer ABC”的文件夹(最后一个空格)成为例如“EHFJ〜1”。 另外,用户使用特殊字符如•和其他奇怪的文件名。 如何大量重命名文件/文件夹删除最后的空格? 是否有可能使用Linux / Mac OS脚本? 谢谢

如何在进入bash脚本的一组值之前添加换行符?

我有一套数据pipe道到一个bash脚本。 以下是这些数据的例子: "foo1": "Miscellaneous text", "foo2": "More text", "foo3": "blah blah blah", "foo4": 1635.0, "foo5": 0.0, "foo1": "Miscellaneous text that is different", "foo2": "More text1231231", "foo3": "blah blah blah234234", "foo4": 1633425.0, "foo5": 0.0, "foo1": "Miscellaneous text abc123", "foo2": "More text122121", "foo3": "blah blah blah414124", "foo4": 163235.0, "foo5": 1.0, "foo1": "More Miscellaneous text", "foo2": "asdfasdfaMore text", […]

在linux中列出具有上次访问date的文件

我想清理一个服务器,让我的网站pipe理员变成一团糟。 我知道如何使用find和-atime来列出最近x天内没有访问的所有文件,但是我正在寻找的是在/foo目录下一级文件的最后访问date列表: /foo/bar1.txt Dec 11, 2001 /foo/bar2.txt Nov 12, 2008 /foo/bar3.txt Jan 12, 2004 对于目录/foo下一级文件夹,列出目录中最近访问的文件的date(对于识别上次访问date没有深度限制) /foo/bar1/ Feb 13, 2012 /foo/bar2/ Oct 11, 2008 其中/foo/bar1/具有1998年1月1日和2012年2月13日修改的文件,而/foo/bar2/有30个文件,其中最近一次访问是2008年10月11日。 这个问题类似于: https : //stackoverflow.com/questions/5566310/how-to-recursively-find-and-list-the-latest-modified-files-in-a-directory-with-s ,而不是修改date,感兴趣的date是最后访问的date。

如何从日志文件中删除旧的日志条目并将它们存档到Linux中的其他位置?

CentOS 4.x 如果这不是提问这个问题的适当的地方,我提前道歉。 它属于一个Linux服务器/ ITpipe理任务。 我在旧的CentOS 4.x服务器上有一个日志文件,我想删除比特定date更早的日志条目,并将它们放在一个新的文件中进行归档。 这是一个日志格式的例子: 2012-06-07 22:32:01,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:03,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:04,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123| 2012-06-07 22:32:10,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:12,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:15,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123| 2012-06-07 22:32:40,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:32:58,289 ABC:0|Foo|Foo2|4.4|1234|Some Event|123|blah blah blah 2012-06-07 22:33:01,289 ABC:0|Foo|Foo2|4.4|1234|Some […]

Bash提示颜色Ubuntu

我正在尝试使用基于Ubuntu 12.04服务器安装的简单shell脚本来为系统用户设置提示颜色。 我想让Puppet将文件color.sh放在/etc/profile.d/中 – 具有权限744 但该文件根本不是来自用户的。 〜/ .bashrc似乎覆盖了这个。 if [[ ${EUID} == 0 ]] ; then PS1="\\[\\033[01;31m\\]\\h\\[\\033[01;34m\\] \\W \\$\\[\\033[00m\\] " else PS1="\\[\\033[01;32m\\]\\u@\\h\\[\\033[01;34m\\] \\w \\$\\[\\033[00m\\] " fi 我宁愿不使用Puppet来操作〜/ .bashrc文件,而是使用profile.d脚本来全局工作。

bash:将多行读入ssh时使用外部variables

我很抱歉,如果标题不完全描述我在找什么。 请尽可能编辑。 我有一个bash脚本,执行以下操作: serveruser="root" serverip=1.2.3.4 serverpath="/var/www" ssh "$serveruser"@"$serverip" /bin/bash <<\EOF mkdir -p "$serverpath/mysqldumps/" cd "$serverpath/mysqldumps/" domainname=somedomain.com mysqldump -h 192.168.1.4 -udba -ppassword -c –add-drop-table –add-locks –create-options –databases –quick –lock-tables $domainname > $domainname.sql EOF 我的问题是,我“喂”给ssh多行不parsing我设置的variables。 这显然是因为variables没有在远程机器上设置,只能在我的本地shell中设置。 我怎么能通过这些variables或可能传递多个线路以不同的方式ssh?

如何将多行variables作为parameter passing给函数

试图捕获和显示curl的输出是让我疯狂。 我终于find了一个解决方法,但我不明白为什么它是必要的。 这是一个失败的脚本: #!/bin/bash function echo_output() { echo $@ } CURL_OUTPUT=$(curl -sL –head www.google.com/foobar) echo_output "$CURL_OUTPUT" 这里有一个脚本可以工作:(转义回车) #!/bin/bash function echo_output() { OUT="${@//[$'\r']/\r}" echo $OUT } CURL_OUTPUT=$(curl -sL –head www.google.com/foobar) echo_output "$CURL_OUTPUT" 是什么赋予了? 换行符和“$ @”有什么特别之处? 谢谢您的帮助。

如何以编程方式查找默认的ssh密钥?

在我的大部分经验中,默认情况下, ssh将在〜/ .ssh / id_rsa(.pub)中查找默认密钥对。 偶尔我尝试编写脚本来利用这个默认密钥位置,但是我最终对它进行了硬编码(例如DEFAULT_KEY_LOCATION="${HOME}/.ssh/id_rsa" /。ssh DEFAULT_KEY_LOCATION="${HOME}/.ssh/id_rsa"等),我觉得它是一个BadThing™。 是否有任何环境variables或ssh工具的输出,可以告诉我哪个用户的默认密钥的位置? 例如,是否有像ssh-defaults –key-location或环境variables$ SSH_DEFAULT_KEY?

在zipfile中的文件名相同的grep -l

给定一组zip文件,是否有一个简单的方法来列出那些包含名称与给定模式匹配的文件的zip文件。 使用grep -l只列出其内容包含与给定模式匹配的行的文件? 我已经能够提出最好的是 for i in $ZIPFILE_LIST > do j=$(basename $i) > unzip -l $i > /tmp/$j > grep -l $PATTERN /tmp/$j > rm /tmp/$j > done 但它是相当hacky,没有例如通过sed传递grep输出(与各种逃避头痛)它会告诉你哪些文件你关心,但它并不实际上会给你一个forms的完整path,然后可以传递给别的东西。 这似乎是一个相当普遍的用例,应该有一些更好的开箱即用的工具或工具的组合来做到这一点。