Articles of bash

从键盘发送SIGINT到bash中的pipe道命令

如果在bash中运行a | b | c | d a | b | c | d a | b | c | d在命令行上,然后按^ C ,哪个进程得到信号?

为什么unix读取时不读最后一行?

我的脚本 export IFS=":" cat hello | while read abcd; do echo $a,$b,$c,$d done 我的文件hello 1:1:1:1 2:2:2:2 3:3:3:3 我的输出 1,1,1,1 2,2,2,2 如果我在3:3:3:3之后input一个空行,那么输出就变成了 1,1,1,1 2,2,2,2 3,3,3,3 任何人都知道我可以如何解决这个问题,所以我不需要在你最后一个空行?

如何处理shell脚本中的错误/exception?

下面是我在bash中执行的脚本。 它工作正常。 fileexist=0 for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); do mv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/ fileexist=1 done 问题陈述:- 在我上面的shell脚本中必须每天使用cron job运行,我没有任何error/exception handling mechanism 。 假设有什么不对的地方,我不知道发生了什么事情? 在执行上面的脚本之后,还有some other scripts that will be dependent on the data provided by above script ,所以我总是从其他依赖脚本数据的人那里投诉,发生了错误。 那么有什么办法可以get notified if anything wrong has happened在我的脚本中get notified if anything wrong has happened了get notified if anything wrong has […]

grep与正则expression式:空格不匹配,除非我添加一个断言

GNU grep 2.5.4在Ubuntu 10.04的bash 4.1.5(1)上 这匹配 $ echo "this is a line" | grep 'a[[:space:]]\+line' this is a line 但是这不是 $ echo "this is a line" | grep 'a\s\+line' 但是这也匹配 $ echo "this is a line" | grep 'a\s\+\bline' this is a line 我不明白为什么#2不匹配(而#1)和#3也显示匹配。 这里有什么区别?

Bash在参数中完成path(带有等号)

我曾经可以键入以下内容: $> ./foo –arg = <TAB> foo是我写的任何程序,它会给我一个当前目录中的文件列表,就像tab-completion通常一样。 我不必对/ etc / bash_completion进行任何更改。 然而,最近,这已经消失,原因不明。 有谁知道如何重新启用此function? FWIW,这仍然做正确的事情(注意缺乏等号): $> ./foo –arg <TAB>

sudoers NOPASSWD:sudo:没有tty礼物,也没有askpass计划

我已经添加了这样的用户: $ adduser –system –home /no/home –no-create-home –group –disabled-password –disabled-login testuser 将用户添加到组中: $ adduser testuser testgroup 添加到sudoers(visudo)的行数: testuser ALL=(ALL) NOPASSWD: ALL %testgroup ALL=(ALL:ALL) NOPASSWD: ALL 当我尝试运行带有以下内容的bash脚本时: #!/bin/sh sudo -u testuser /usr/bin/php /usr/local/bin/script.php 但是当我运行这个脚本时,我得到了日志中的错误: sudo: no tty present and no askpass program specified 编辑: requiretty不在sudoers文件中。

在bash中使用前面的命令的输出

在Mathematica中,通过使用%可以重复使用前一个命令的输出。 是什么类似的可能为bash(或其他一些shell)? 例如,我运行了一个警告,但我想find所有的警告。 所以,我input make | grep "warning" 但是我无法看到make的输出。 我想input这样的东西,而不是: make % | grep "warning"

将文件从Windows复制到Ubuntu子系统

我启用了开发者模式,并Bash on Ubuntu on Windows安装了Bash on Ubuntu on Windows 。 我的主目录可以在%localappdata%\Lxss\home\<ubuntu.username>\ ,我创build了一个叫做Pictures的子目录,这样完整的path应该是 在Windows上: C:\Users\<windows.username>\AppData\Local\lxss\home\<ubuntu.username>\Pictures 在bash上:/ /home/<ubuntu.username>/Pictures 如果我从bash使用命令touch hello.txt创build一个文件,我可以自由地在Windows用户界面中看到这个文件,并将其复制到我的桌面。 但是,如果我从Windows用户界面创build一个新的文本文件并将其保存在C:\Users\<windows.username>\AppData\Local\lxss\home\<ubuntu.username>\Pictures ,即使我重新启动bash或窗口,当我做ls -l时文件不可见。 为什么不能在自己的主目录中看到从Windows端创build的文件? 编辑使用/mnt/c是不是一个解决scheme,我想了解为什么它不会看到这些文件,如果有补救措施,以便它将能够看到UI创build的文件,而不是尝试使用terminal复制粘贴或移动文件。

Godaddy主机上的CakePHP控制台

我一直在努力让我的CakePHP网站在Godaddy“网格托pipe”帐户上工作。 我的蛋糕应用程序安装在帐户的子目录中,可以通过子域访问。 我不得不调整我的.htaccess文件来使这个工作,现在我需要让CakePHP控制台在这个环境中工作。 我在Amazon EC2服务上托pipe的Ubuntu服务器上安装了相同的蛋糕应用程序。 基本上一个简单的Ubuntu LAMP安装程序。 CakePHP控制台在此环境中按预期工作。 当我尝试在Godaddy上运行控制台时,我收到以下消息: CakePHP控制台:此文件加载不正确,无法继续。请确保/ cake / console在您的系统path中,并检查手册是否正确使用此命令( http://manual.cakephp.org/)。 ) 我已经开始在cake / console / cake.php中添加一些debugging代码来了解发生了什么。 在godaddy网站上,当我在第183行回显print_r($this->args) ,发现数组是空的。 当我在我的Ubuntu EC2实例上这样做时,我得到这个: Array ( [0] => /var/www/www.directory.sdcweb.org/htdocs/cake/console/cake.php ) 它看起来像godaddy的命令行PHP不通过bash shell命令行参数。 有没有人有一些build议,我可能会得到CakePHP控制台上Godaddy的工作? 调用Cake shell的bash脚本包含以下内容 LIB=${0/%cake/} APP=`pwd` exec php -q ${LIB}cake.php -working "${APP}" "$@" exit; 我在想,修改这个脚本可能会解决这个问题。

创build目录结构的Bash脚本

我一直在search整夜,试图find一种方法来创build一个脚本,创build一个目录结构。 这看起来像这样: / 共享 共享/项目 共享/系列 共享/电影 共享/电影/动作 你明白了。 脚本读取的文件如下所示: 共享备份 共享数据 共享项目 共享projcets系列 共享项目电影 共享项目电影行动 我想要创build一个脚本来读取文件中的每一行,并为每一行运行以下命令:如果该目录存在,它将自己置于该目录中,并从该目录创build结构,如果该目录不存在,则创build它。 当该行中的所有条目都已经在之前时,回到原始目录并阅读下一行。 我的系统是Ubuntu 10.10。 到目前为止,我已经做到了这一点,但是它不起作用。 #!/bin/bash pwd=$(pwd) for structure in ${column[*]} do if [ $structure ] then cd $structure else mkdir $structure fi done cd $pwd