Articles of shell

简洁的方式来打印所有的行,直到匹配给定模式的最后一行

我试图find一个简洁的shell,它会给我一个文件中的所有行, 直到某种模式。 用例将转储日志文件中的所有行,直到find指示服务器已重新启动的标记。 这是一个愚蠢的壳只有这样的方式: tail_file_to_pattern() { pattern=$1 file=$2 tail -n$((1 + $(wc -l $file | cut -d' ' -f1) – $(grep -E -n "$pattern" $file | tail -n 1 | cut -d ':' -f1))) $file } 一个稍微更可靠的Perl方式,需要stdin上的文件: perl -we ' push @lines => $_ while <STDIN>; my $pattern = $ARGV[0]; END { my $last_match = […]

在SLURM sbatch脚本中使用Bashvariables

我试图从另一个文件中获取一个值,并在SLURM提交脚本中使用它。 但是,我得到一个错误,该值是非数值的,换句话说,它不被解除引用。 这是脚本: #!/bin/bash # This reads out the number of procs based on the decomposeParDict numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict` echo "NumProcs = $numProcs" #SBATCH –job-name=SnappyHexMesh #SBATCH –output=./logs/SnappyHexMesh.log # #SBATCH –ntasks=`$numProcs` #SBATCH –time=240:00 #SBATCH –mem-per-cpu=4000 #First run blockMesh blockMesh #Now decompose the mesh decomposePar #Now run snappy in parallel mpirun -np $numProcs snappyHexMesh -parallel […]

如何调用位于其他目录中的Makefile?

我正在尝试这样做: 我想从位于不同目录的shell脚本调用一个make( Makefile存在于其他目录中,可以使用abcpath)。 我该怎么做呢? 由于shell脚本不允许我进入Makefile目录并执行make ,我怎样编写shell命令(通过给Makefile执行path)来执行make ?

如何在shell中重复连字符(连字符)

我怎样才能在shell中重复这个字符? 我已阅读并尝试过,但这不适用于- 。 它会抛出错误invalid option 。 下面是我使用的确切命令: printf '-%.0s' {1..100} 原始发布行: printf '-%0.s' {1..100} 我也尝试逃避-通过放置一个\但在这种情况下,它重复\- n次。

Android 2.3:只读文件系统卡住了

你好。 我有一个LG-Optimus HUB E510 Android设备。 两个星期前,我根植了我的设备以访问内部存储并更改一些文件(如警报,通知,声音,.etc)。 那么我做到了。 但在重新存储出厂设置后,内部存储文件又变为只读。 然后我试着用adb–shell来改变文件夹和文件的权限 chmod 777 "folder destination" 但贝壳反应 无法chmod系统/媒体/audio/警报: 只读文件系统 现在我不知道该怎么做。 所以,我需要你的build议。 谢谢。 图片 这是从Ubuntu的shell改变权限的尝试 在eclipse DDMS透视图中包含当前权限的文件

执行命令行并返回命令输出

目前,我正在使用非标准SYSTEM内部例程(类似于Fortran 2008 EXECUTE_COMMAND_LINE内部函数)从我的fortran程序中使用shell命令行调用: CALL SYSTEM(commandStr) 其中commandStr是包含我要执行的shell命令的string。 此刻,我不知道直接的方式来返回commandStr的输出,但只有它的返回状态。 所以,我现在正在做的是将输出写入文件,然后从Fortran程序中读取文件。 例: CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile') 如果我想从myFile中删除逗号。 然后我使用OPEN和READ来获取dummyFile的内容。 这工作得很好,但是我很关心从磁盘写入/读取文件,特别是如果我在一个长的循环内执行此操作,并且commandStr输出很大。 有没有办法将commandStr输出redirect到我可以直接从Fortran程序访问的内存缓冲区(而不是硬盘)(也许是通过一个特定的UNIT号码)?

就像将所有的命令行参数存储到一个bash脚本中一样

假设我有一个名为foo.sh的bash脚本。 我想这样称呼它 foo.sh Here is a bunch of stuff on the command-line 我希望将所有文本存储到一个variables中并打印出来。 所以我的输出是: Here is a bunch of stuff on the command-line 我将如何做到这一点?

如何获得在bash脚本中执行的命令的进程ID?

我有一个脚本,我想同时运行2个程序,一个是ac程序,另一个是cpulimit,我想先用“&”在后台启动C程序,然后得到C程序的PID,把它交给cpulimit,它也会在后台运行“&”。 我试过下面这个,它只是开始第一个程序,并从不开始cpulimit。 另外我运行这个作为一个启动脚本作为root用在arch linux中的systemd。 #!/bin/bash /myprogram & PID=$! cpulimit -z -p $PID -l 75 & exit 0

ftrace:通过echo从function_graph更改current_tracer时系统崩溃

我最近一直在玩ftrace来监视我的系统的一些行为特征。 我一直在处理通过一个小脚本打开/closures跟踪。 运行脚本后,我的系统会崩溃并重新启动。 最初,我相信脚本本身可能有错误,但是我已经确定,当current_tracer设置为function_graph时,崩溃和重新启动是将跟踪器回显到/ sys / kernel / debug / tracing / current_tracer的结果。 也就是说,下面的命令序列会产生崩溃/重启: echo "function_graph" > /sys/kernel/debug/tracing/current_tracer echo "function" > /sys/kernel/debug/tracing/current_tracer 在上面的echo语句导致崩溃之后重启重启,我看到很多输出结果如下: 清除孤立的inode <inode> 我试图重现这个问题,将函数的current_tracer值replace成C程序中的其他东西: #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int openCurrentTracer() { int fd = open("/sys/kernel/debug/tracing/current_tracer", O_WRONLY); if(fd < 0) exit(1); return fd; } int writeTracer(int fd, char* […]

计算Bash中的平均值

问题陈述 给定N个整数,计算其平均值,修正到小数点后三位。 input格式第一行包含一个整数N.然后是N个整数,每个整数换行。 输出格式显示N个整数的平均值,四舍五入至小数点后三位。 input约束 1 <= N <= 500 -10000 <= x <= 10000 (x refers to elements of the list of integers for which the average is to be computed) 示例input 4 1 2 9 8 示例输出 5.000 交代 第一行中的“4”表示有四个整数的平均值将被计算。 平均值=(1 + 2 + 9 + 8)/ 4 = 20/4 = 5.000(正确到小数点后三位)即使是多余的,也请包括零(例如0.000而不是0)。