Articles of shell

从历史logging执行一系列命令

我正在使用Ubuntu,我想重复一些我执行的命令。 我试过类似的东西 for i in $(seq 2006 2013); do \!$i; done; 但失败了,因为shell试图执行命令'!2006'。 man history 也没有向我透露如何重复一系列命令。

将html5页面logging为video

我的目标是有一个Ubuntu(桌面)服务器,“简单地”将html5网页转换为video。 我想捕捉平滑的CSS和JSanimation。 到目前为止,我试过这个:(phantomjs) https://gist.github.com/phanan/e03f75082e6eb114a35c 时间和帧速率不稳定或快。 目前为止,我的最佳解决scheme是在Kiosk模式下打开Goog​​le Chrome浏览器窗口,等待3秒钟,然后使用x11grab通过ffmpeg进行logging。 这感觉就像是一个“笨拙”和不专业的解决scheme。 program.sh #!/bin/bash duration=$1 outputFile=$2 stop=$(($duration+5)) ./openBrowser.sh $stop & PIDOIS=$! ./recScreen.sh $duration $outputFile & PIDMIX=$! wait $PIDIOS wait $PIDMIX recScreen.sh #!/bin/bash sleep 3 ffmpeg -video_size 1920×1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast -t "$1" "$2".mkv killall -9 chrome openBrowser.sh #!/bin/bash /usr/bin/google-chrome –kiosk […]

BASH | 如何获取bash中一行的字段数(使用剪切?)

鉴于以下数据: field1;field2;field3;field4; 如何获得这一行的字段数? 例如,这个命令应该在这里给出4 。 实际上,每一行我没有相同数量的内容,但我需要全部归还。 一旦我设法计算字段的数量,我也将设法做一个循环来获取它们。 (操作系统:Ubuntu 13.04) 预先感谢您的帮助。

虽然查找-exec rm工作,但是非零返回代码

我在一个Linux系统我不知道什么是以下执行find的错误: mkdir a && touch a/b find . -name a -type d -exec echo '{}' \; ./a find . -name a -type d -exec rm -r '{}' \; find: `./a': No such file or directory echo的调用仅用于testing目的。 我期望最后的命令完全删除目录“./a”并返回0.相反,它将删除目录并生成错误消息。 重复,它确实删除目录! 到底是怎么回事?

有没有任何标准的机制或约定来防止Bash环境variables名称冲突?

这个网站http://www.tldp.org/LDP/abs/html/gotchas.html#PARCHILDPROBREF表明一个脚本不能改变它的父母的环境variables。 所以,(除非是脚本来源),脚本不会在其父环境中意外地更改一个命名的环境variables。 但是,如果程序依赖于声明的环境variables,则可能会发生名称空间冲突。 例如,假设我不知道vim使用环境variables名称“VIMRUNTIME”。 而巧合的是,我碰巧把这个环境variables名称用于我自己的无关的目的。 然后vim会从VIMRUNTIME环境variables中获取垃圾。 是否有任何机制或标准,众所周知的命名约定来避免这种types的命名空间冲突? 当然,我可以做一些像使用某种前缀命名所有环境variables的东西。 但是我想知道是否有这方面的知名的正式标准。 或者,在Bash中有没有find某种名称空间机制? 鼓励在其他相关陷阱的意见。

如何将目录复制到使用bash安装的目录中?

假设嵌套的目录foo/bar和一个空目录dest 。 我想调用像install foo dest这样的dest包含目录foo/bar 。 我已经尝试了以下内容: install foo dest => install:省略目录“foo” install -d foo dest =>没有任何反应

将引用的parameter passing给shell脚本并保持引用

我试图重新使用发送到我的脚本的参数作为我在脚本中执行的命令的参数。 看下面的例子,我执行mailx 。 庆典 $./myscript.sh "My quoted Argument" myscript.sh mailx -s $1 这最终被执行为: mailx -s My Quoted Argument 。 我尝试了"$1" ,但我的报价被扔掉了。 (错误的语句,请阅读下面的答案) 我试过""$1""但是我的报价被扔掉了。 我试图做'$1'但这是强烈的引用,所以1美元永远不会得到解释。 我意识到我可以做$@ ,但是这给了我所有的参数。 ….你得到的图片 任何帮助,将不胜感激!

简单的shell脚本来复制文件和文件夹,并执行一个命令

我以前没有写过任何Shell脚本,但是我必须编写一个简单的shell脚本来执行以下操作; 我将把所有需要的文件保存在一个文件夹中,并将其作为一个tar文件与这个shell脚本捆绑在一起; 所以当用户运行shell脚本时,需要将各自的文件复制到各自的目的地。 复制的执行如下: 将plugin.so文件复制到/ usrlib / mozilla / plugins / 将.so库文件复制到/ usr / local / lib / 将一些头文件目录(文件夹)复制到/ usr / local / include / 最后,需要做ldconfig。

如何删除一个shell脚本中的string的所有发生的点?

例如hostname =“test.test.test”,那么去除结果后应该像“testtesttest”

curl“写出”特定标题的值

我目前正在写一个bash脚本,我正在使用curl。 我想要做的是获得一个特定的响应头。 基本上我想要这个命令的工作: curl -I -w "%{etag}" "server/some/resource" 不幸的是,-w,–write-out选项似乎只有一组支持的variables,不能打印任何属于响应的头部。 我是否需要自己分析curl输出以获取ETag值,还是有办法让curl打印特定头文件的值? 显然有点像 curl -sSI "server/some/resource" | grep 'ETag:' | sed -r 's/.*"(.*)".*/\1/' 做的伎俩,但它会更好,有curl过滤标题。