Articles of shell

检查string是否与指定的date格式相匹配

我需要我的bash脚本接受date格式string(“strftime”格式),例如: << [%Y-%m-%d%H:%M:%S] >> 然后检查我input文件中的数据(左值)是否与给定的string匹配: 格式string:<< [%Y-%m-%d%H:%M:%S] >> 数据文件: << [2017-05-04 14:49:18] >> 12.1 – 有效 <[2017-05-04 14:49:18]> -1421 – 无效 << [05-04-2017 14:49:18] >> 1231231.02 – 无效 input文件有很多行,我唯一想到的是使用Python: function check_time_format() { python -c "import time; time.strptime(\"$1\",\"$2\")" 2> /dev/null } while read -r lvalue rvalue; do check_time_format "$lvalue" "$TIMEFORMAT" [[ $? != 0 ]] && […]

将input传递给bash中的交互式命令行程序

我有一个有自己的提示程序 example_program> 我需要通过这个程序运行一系列的命令 example_program> command_A example_program> command B Please enter input: [input_here] example_program> command C 我可以通过shell脚本中的以下行发送命令A,B,C: (echo "command_C" && cat) | (echo "command_B" && cat) | (echo "command_A" && cat ) | example_program 如何input所需的input,然后在命令B([input_here])之后提示input? 我无权发送或期望。

使用shell脚本使用sedreplacestring的特定字符

我必须用一些其他的值replace一个特定的文件行。 例如:我有一个文件的内容如下: request.timing=0/10 * * * * * ? 现在,我想用dynamic值replace10(或者具体来说,在那个地方的任何值)。 例如,如果我想用20replace它,那么文件应该更新为: request.timing=0/20 * * * * * ? 有人能帮我吗? 我使用sed如下: sed -i "s/request.timing=0\/??/request.timing=0\/$poller" poller是我们通过的dynamic值。

Shell脚本提供了很多这些东西作为输出,它从来没有做过

最好只告诉你input/输出,你会明白为什么它很奇怪。 对于擅长这个的人来说应该是一个快速的解决scheme,我花了一天的时间来写这个脚本。 我采取的步骤: 运行AutoBackup.bat C:\cygwin\bin\sh AutoBackupShell.sh pause AutoBackup.bat调用AutoBackupShell.sh name=`C:/cygwin/bin/date +'backup_%Y_%m_%d_%H_%M_%S'` end="_Engine" name=$name$end C:/cygwin/bin/cp -r ./Engine Backups/$name 输出是这样一个文件夹: backup_2014_07_16_19_07_14_Engine 需要注意的是,在我的Windows机器上,那些奇怪的问号框看起来就像这些“,”更垂直居中。 输出应该如下所示: backup_2014_07_16_19_07_14_Engine 电脑笔记: Windows 7 64位 使用cygwin的sh 在弄清楚为什么会出现奇怪的字符之后,我需要做的另一件事情是如何只复制具有特定扩展名的文件进行备份。 这不是问题的一部分,但有一点方向可以帮助我。

使用shell添加文件名合并多个文件

我想合并多个文件(在我的情况下是.svg )到一个大文件(大约1200个文件) 我做的(Windows)的命令copy *.svg all.svg工作很酷,但我需要在文件的内容的每个部分之前的文件名,所以我将能够执行一些批量文本转换 所以我现在的输出是all.svg <CONTENT OF 1.svg> <CONTENT OF 2.svg> 等等 我想要它 1.svg <CONTENT OF 1.svg> 2.svg <CONTENT OF 2.svg> 等等 这是可能的壳或你知道一些工具来做到这一点?

从历史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某种名称空间机制? 鼓励在其他相关陷阱的意见。