Tag: bash

如何以CSV格式输出MySQL查询结果?

有没有一种简单的方法来从Linux命令行运行MySQL查询并以CSV格式输出结果? 这是我现在正在做的事情: mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv select id, concat("\"",name,"\"") as name from students EOQ 当需要用引号包围很多列时,或者结果中有需要转义的引号时,它会变得杂乱无章。

我如何遍历由Bash中的variables定义的一系列数字?

当范围由variables给出时,如何迭代Bash中的一系列数字? 我知道我可以做到这一点(在Bash 文档中称为“序列expression式”): for i in {1..5}; do echo $i; done 这使: 1 2 3 4 五 然而,我怎样才能用variablesreplace范围端点? 这不起作用: END=5 for i in {1..$END}; do echo $i; done 打印: {} 1..5

如何在单引号string中转义单引号?

比方说,你有一个bash alias如: alias rxvt='urxvt' 这工作正常。 然而: alias rxvt='urxvt -fg '#111111' -bg '#111111'' 将不会工作,也不会: alias rxvt='urxvt -fg \'#111111\' -bg \'#111111\'' 那么一旦你已经逃脱了引号,你怎么最终匹配一个string中的开头和结尾的引号呢? alias rxvt='urxvt -fg'\''#111111'\'' -bg '\''#111111'\'' 看起来很笨拙,虽然它会代表相同的string,如果你被允许像这样连接它们。

从Bash脚本检查程序是否存在

我将如何validation程序是否存在,以何种方式返回错误并退出,还是继续执行脚本? 这似乎应该很容易,但它一直困在我身上。

为什么一个正确的shell脚本会给出一个包装/截断/损坏的错误信息?

我有一个似乎应该工作的命令的shell脚本,但相反,它失败了一个奇怪的包装/截断/损坏的错误消息。 例: $ ls -l myfile -rw-r—– 1 me me 0 Aug 7 12:36 myfile $ cat myscript ls -l myfile $ bash myscript : No such file or directory 该文件显然存在,但即使我没有,这是我通常会得到的错误消息: $ ls -l idontexist ls: cannot access idontexist: No such file or directory 注意它是如何包含工具名称ls ,消息string和文件名,而我的没有。 这是我得到的,如果我尝试使用mysql 。 错误消息看起来像是已经被包装了,现在开始报价: Command: mysql -h myhost.example.com Expected: ERROR […]

sh和bash之间的区别

在编写shell程序时,我们经常使用/bin/sh和/bin/bash 。 我通常使用bash ,但我不知道它们之间有什么区别。 bash和sh之间的主要区别是什么? 在bash和sh编程时我们需要注意什么?

.bashrc,.bash_profile和.environment有什么区别?

我已经使用了许多不同的基于nix的系统,看起来每个Bash的风格都有不同的algorithm来决定运行哪个启动脚本。 对于设置环境variables和别名以及打印启动消息(例如MOTD)这样的任务而言,哪个启动脚本是适当的位置? 把东西放在.bashrc , .bash_profile和.environment之间有什么区别? 我也看到了其他文件,如.login , .bash_login和.profile ; 这些有关吗? 在物理上login,通过ssh远程login,打开一个新的terminal窗口时,有什么区别呢? 跨平台(包括Mac OS X(及其Terminal.app)和Cygwin Bash)有什么重大差异?

在shell中,“2>&1”是什么意思?

在Unix shell中,如果我想将stderr和stdout结合到stdoutstream中进行进一步的操作,我可以在我的命令结尾附加以下内容: 2>&1 所以,如果我想在g ++的输出上使用“head”,我可以这样做: g++ lots_of_errors 2>&1 | head 所以我只能看到前几个错误。 我总是记不起这件事,而且我经常不得不去查看它,主要是因为我不完全理解这个特殊技巧的语法。 有人可以把这个分开来解释一个字符是什么“2>&1”的意思吗?

在Bash中提取文件名和扩展名

我想分别得到文件名(没有扩展名)和扩展名。 到目前为止,我发现的最佳解决scheme是: NAME=`echo "$FILE" | cut -d'.' -f1` EXTENSION=`echo "$FILE" | cut -d'.' -f2` 这是错误的,因为如果文件名包含多个“。”,则不起作用。 字符。 如果我们说,我有abjs,它会考虑a和b.js ,而不是ab和js 。 这可以很容易地在Python中完成 file, ext = os.path.splitext(path) 但如果可能的话,我宁愿不要为此解雇Python解释器。 任何更好的想法?

如何parsingBash中的命令行参数?

说,我有一个脚本,调用这一行: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile 或者这个: ./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile 什么是可接受的parsing方式,使得在每种情况下(或两者的组合) $v , $f和$d都将被设置为true , $outFile将等于/fizz/someOtherFile ?