Articles of bash

我如何看到du在GB而不是在linux的MB?

这工作: du -cshm . 但是这个失败了: du -cshg . 我怎样才能看到它的GB单位?

Rsync似乎与.bashrc不兼容(原因是“你的shell干净吗?”)

事实certificate,rsync无法与具有.bashrc文件的远程服务器一起使用? 在本地客户端运行rsync时: protocol version mismatch — is your shell clean? (see the rsync man page for an explanation) rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7] 如上所述,删除服务器上的.bashrc解决了这个问题。 如何解决它而不删除.bashrc文件(暂时)?

检查是否从bash脚本安装了ruby gem

我需要从bash脚本中检查是否安装了某些Ruby gems。 我以为我可以做类似的事情 if ! gem list <name>; then do_stuff; fi 但在命令行上使用echo $? 显示gem list <name>返回0,不pipe名字是否被find。 这是否意味着我必须使用grep来过滤gem list的输出,或者有更好的方法来检查是否安装了gem。

Bash提示低于输出 – 背景日志尾巴

我曾经为一家拥有自定义shell的公司工作,他们正在Linux上运行他们的产品之一,我期望复制这个shell的一个关键特性。 所有的工作都是通过后台进程完成的,日志的输出显示给所有连接的用户。 日志将在后台拖尾到你的shell,并且提示行将永远保持完美的底部。 例如 Log line 1 Log line 2 Log line 3 ![ROOT@PRODUCT51-LIVE]:~/ # 我试图用bash做这件事的方法是在用户.bashrc文件中启动一个分离的尾部,但是当命令的输出被发送到标准输出时,它会在bash提示下进入,比如 ![ROOT@PRODUCT51-LIVE]:~/ #Log line 1 Log line 2 Log line 3 而用户将不得不按下input或Ctrl C的干净的提示行。 我不知道如何使提示总是跳转到输出的底部,我想我使用错误的术语来find谷歌上的任何东西,因为我没有运气 – 有谁知道如何做到这一点与bash?

运行多个会话时奇怪的bash历史行为

当我使用多个terminal窗口时,如何存储命令行历史logging? 我知道它存储在.bash_history但是如果打开新窗口,我不能看到使用历史logging的逻辑。 它几乎感觉不确定,从某种意义上说,如果我试图在新窗口中使用箭头,我永远不知道我会看到什么命令。 有人可以解释这个吗? 有没有办法以这样的方式来控制历史,我可以从特定的窗口重用历史?

如何从STDIN中读取多行到一个variables?

我一直在使用这个问题无济于事。 我正在工作中自动化一个构build过程,而我所要做的就是获取版本号和构build的一个很小的描述,可能是多行的。 运行的系统是OSX 10.6.8。 我已经看到了使用CAT来处理每一行的一切。 我不知道我应该使用什么,为什么。 尝试 read -d '' versionNotes 如果用户必须使用退格键,则会导致乱码input。 也没有什么好的方法来终止input,因为^ D不会终止,^ C只是退出这个过程。 read -d 'END' versionNotes 工作…但仍然input,如果退格键是必要的。 while read versionNotes do echo " $versionNotes" >> "source/application.yml" done 没有正确地结束input(因为我太晚,查不到匹配空string)。

使用自动化脚本设置时区

我正在编写脚本来自动设置新的slicehost安装。 在一个完美的世界里,当我开始剧本之后,它就会运行,而我却不在意。 除了一个例外,我已经成功了。 如何设置时区,永久(重新生存)和理智(调整标准和夏令时,所以不要只是强制date)…方式,不需要我的input? 目前,我正在使用 dpkg-reconfigure tzdata 这似乎没有任何方法来强制参数。 它要求用户input。 编辑:我在这里编辑,而不是评论,因为评论似乎不允许代码块。 下面是我结束的实际代码,基于下面的Rudedog的评论。 我也注意到这不会更新/ etc / timezone。 我不确定是谁使用的,但如果有人这样做,我也是这样设置的。 TIMEZONE="America/Los_Angeles" echo $TIMEZONE > /etc/timezone cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime # This sets the time

杀一个屏幕(但不是所有的屏幕)

我在Ubuntu服务器上运行了多个屏幕,这些屏幕的启动方式如下: screen -dmS screen1 cmd screen -dmS screen2 cmd etc… 我需要杀死一个屏幕,但不是所有的屏幕。 用它的名字杀死一个特定屏幕的正确命令是什么? 我已经通过手册页阅读,但我似乎无法find我正在寻找的命令。 另外,我想写这个命令到一个bash脚本,所以我不能简单地screen -r screen1然后按Ctrl + X ,我通常会。

sed用一个空格replace所有的制表符和空格

我得到了一个string,如下所示: test.de. 1547 IN SOA ns1.test.de. dnsmaster.test.de. 2012090701 900 1000 6000 600 现在我想用只有一个空格replacelogging之间的所有标签/空格,所以我可以很容易地使用它与cut -d " " 我尝试了以下内容: sed "s/[\t[:space:]]+/[:space:]/g" 和各种各样的变数,但不能得到它的工作。 有任何想法吗?

如何让pgrep显示完整的进程信息

有没有办法让pgrep给我关于ps每个进程的所有信息? 我知道我可以通过greppipeps ,但这是很多打字,它也给我我不想要的grep过程本身。