Articles of bash

Linux:与Lua的tput杯表演很奇怪

在Lua中,我试图使用shell命令“tput cup foo bar”来移动光标,'io.write('foo')'在这个位置写一个string。 os.execute('tput clear') –clear terminal os.execute('tput cup 2 9') –move cursor to line 2, col 9 io.write('A') –write 'A' at the cursor position os.execute('tput cup 8 2') –move cursor to line 8, col 2 io.write('B') –write 'B' at the cursor position 但是,由于某种原因,它会在第二个光标位置(列2,第8行)上打印这两个字符。 当我使用print()而不是io.write()时,它会在正确的位置打印两个字符。 我不想使用print()出于显而易见的原因,那么如何使用io.write()将两个string写入正确的位置?

按照相同的顺序洗脱多个文件

build立: 我有50个文件,每个文件有25000行。 去做: 我需要按照同样的顺序来洗牌。 例如: 如果在洗牌之前: File 1 File 2 File 3 AAA BBB CCC 然后洗牌后,我应该得到: File 1 File 2 File 3 BBB CCC AAA 即文件中相应的行应以相同顺序混洗。 此外,洗牌应该是确定性的,即如果我给文件A作为input,它应该总是产生相同的洗牌输出。 我可以写一个Java程序来做到这一点,可能是一个脚本。 就像洗牌数在1到25000之间,并将其存储在一个文件中,比如shuffle_order。 然后一次只处理一个文件,并根据shuffle_order命令现有的行。 但有没有更好的/快捷的方法来做到这一点? 请让我知道是否需要更多的信息。

尝试从内部通过屏幕启动一个进程

我有一个有点怪异,可重复,但无法解释的问题与screen 。 我使用ansible / vagrant为我的公司构build了一个一致的开发环境,作为一个略显华丽的点睛之笔,它启动了在screen会话中运行的dev服务器,所以前端开发人员不需要打扰login并手动启动进程,但后端开发者可以login并进行控制。 然而,其中一个系统 – 尽pipe是从头开始构build – 最终会立即死屏(它不logging任何东西到屏幕日志)。 手动运行命令可以正常工作。 (命令正在) screen -L -d -m bash -c /home/vagrant/run_screen_server.sh 我甚至已经在系统上关注了与vagrant / virtualbox有关的所有事情,确保它安装了一个干净的夜间盒子。 完全相同的源代码盒适用于所有其他机器。 有没有其他的debugging步骤,我可以采取还是有什么我失踪?

在rails_root / Incron之外运行rake不会为rails运行rake或bundle命令

我在/ home / myuser / watchDir / myapp中有一个rails应用程序,并设置了一个incron作业来监视../watchDir进行修改。 一旦触发,incron将运行脚本/usr/local/bin/myscript.sh。 这是我能从中运行脚本的唯一地方。 在该脚本中,我调用了在我的根应用程序中运行rake和bundle命令。 我脚本正在运行(我有一个testing),但bundle和rake指令都失败默默。 我相当新的Linux和互联网研究提供了一些解决scheme。 我的脚本里有所有的绝对path。 我试图添加我的bash_profile脚本/ incron命令。 我试着让incron脚本运行位于我的主目录中的另一个脚本。 所有的脚本都是可执行的。 我尝试使用–gemfile选项的bundle ,但不wokr。 有谁知道我必须在这里做什么? 基本上,我想在RAILS_ROOT之外运行bundle和rake命令。 我也想知道incron是否会使rails命令复杂化。 谢谢。 编辑: 这里是相关的文件: Incrontab: /home/myuser/watchDir/ IN_MODIFY,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE /bin/bash /usr/local/bin/runT.sh $@/$# 我也试过这个: /home/myuser/watchDir/ IN_MODIFY,IN_CLOSE,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE source '/home/myuser/.bash_profile && /bin/sh /usr/local/bin/runT.sh' $@/$# 这是它所调用的脚本: #!/bin/bash mkdir /home/myuser/worked #This is to ensure that that incron is running and […]

bash脚本返回空的ps结果,CLI中的相同单行返回正确

我有一个运行这个命令的bash初始化脚本: sudo -umyuser APPLICATION_ENV=production php script/push-server.php >> /var/log/push-server.log 2>&1 & 然后我尝试捕获这两个pid,并把它们放到一个文件中: echo $! > /var/log/push_server.pid childpid=$(ps –no-heading –ppid $! | tail -1 | awk '{ print $1 }') echo $childpid >> /var/log/push_server.pid 但是,如果使用–no-heading标志,它将返回空白。 如果我在命令行上运行完全相同的ps命令,它将返回正确的PID号。 如果我这样修改一下命令,也会发生同样的情况: childpid=$(ps –no-heading –ppid $! | awk '{NR>1}' | tail -1 | awk '{ print $1 }') 我已经尝试删除NR,尾巴,添加 – 无标题,甚至一直下降到只是做: chidlpid=$(ps […]

如何结束与bash脚本的Django进程?

我写了一个bash脚本来启动一个django进程,但是,我希望能够在运行bash脚本的同时结束django进程。 我正在为Koding.com编写一个Web应用程序,通过按下button运行bash脚本,在连接到用户个人虚拟机的在线terminal中启动一个django进程,我希望用户能够结束还有一个button。 我知道控制C会结束这个过程,但我一直无法find如何在bash脚本中做到这一点。 我怎么能这样做? 谢谢!

如何使用shell脚本检查两台机器中的文件夹?

我正在研究一个我需要在machineX上运行的shell脚本。 它将在其他两台机器( machineQ和machineQ此文件夹MAPPED_LOCATION中检查某个文件夹的格式为YYYYMMDD 。 所以在machineQ和machineQpath都是这样的 – /bat/testdata/t1_snapshot/20140311 在上面的文件夹path里面会有一些文件。 下面是我的shell脚本 – #!/bin/bash readonly MACHINES=(machineP machineQ) readonly MAPPED_LOCATION=/bat/testdata/t1_snapshot readonly FILE_TIMESTAMP=20140311 # old code which I was using to get the latest folder inside each machine (P and Q) dir1=$(ssh -o "StrictHostKeyChecking no" david@${MACHINES[0]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1) dir2=$(ssh -o "StrictHostKeyChecking no" david@${MACHINES[1]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] […]

从文件名中抓取2个数字,然后插入命令

总的来说,我对编程有点新,而且我不确定如何在bash脚本中完成这个任务。 一个简单的背景:在将我的音乐库(以前由iTunes组织)导入到Banshee时,所有的文件都被复制到适合Banshee的数字风格(例如02.而不是02),iTunes显然没有保存ID3标签到文件,所以很多都是空白的。 所以现在我有几千个标签来修复和重复文件摆脱。 为了使这个过程自动化,我开始学习编写bash脚本。 我想出了一个脚本( 你可以在这里看到 )做四件事情:删除不必要的iTunes文件,从用户input有关ID3标签信息的input,并将其存储在variables中,清除所有文件中的任何现有标签信息,信息来自用户,使用eyeD3程序。 现在,这是我遇到我的问题的地方。 这个脚本基本上是盲目地把信息写到dir中的所有mp3文件。 对于所有文件都有共同点的标签,比如艺术家,专辑,全部曲目,年份等等,这都很好。但是我不能用这种方法标记每个单独的曲目号码。 所以我仍然在手动编辑一个标签。 而这是我真的不想做2000多次的事情。 文件名全都是这样的: 01. song1.mp3 02. song2.mp3 03. song3.mp3 将轨道编号写入标签的命令如下所示: $ eyeD3 -n 1 "01. song1.mpg" 所以…我不知道如何去实现这个自动化。 我需要抓住每个文件名的前两位数字,将它们存储在某个地方,然后将每个文件调回到单独的eyeD3命令中。

如何使用bash脚本replace单引号中的值?

你好,我有一个名为“sampleText.txt”,其中包括这样的string行的文本文件, subscribe_key = 'sub-c-xx-xx-xx-xx-xx'; 我需要的是我需要使用bash脚本来改变这个subscribe_key的值。 所以下面给出的bash脚本我使用bt它不起作用。 希望你会帮我让它工作,任何帮助将不胜感激。 谢谢。 #!/bin/bash sed -i.bak -r '/^subscribe_key/{s/"[^']+'"/"sub-c-123-456-789"/}' sampleText.txt

我如何有条件地交换两行sed或其他Linux工具?

我想交换两行,但只有在错误的顺序。 例如,如果我有XML行(文件中的任何位置,在某些位置不需要),如下所示: <person> <given-name>John</given-name> <surname>Smith</surname> </person> 我想交换第二和第三行,以便它产生 <person> <surname>Smith</surname> <given-name>John</given-name> </person> 但只适用于那些行不正常的文件。 有没有办法做到这一点与sed,或其他Linux工具?