Articles of shell

用一个标准的工具来逃避一系列在sh-shell中使用的参数

我正在寻找一个标准的工具,能够把所有的参数都转化为一个适合在自动生成的bash / sh / zsh脚本中用作多个参数的单个string。 这样的命令在脚本的各个学科中是非常有用的。 其用法的一个例子: % shsafe 'A big \nasty string '\'' $HOME $PATH' 'another string \\' 'A big \nasty string '\'' $HOME $PATH' 'another string \\' 在另一个脚本中使用它: % sshc host rm 'file/with spaces and $special chars' 其中sshc包含 #!/bin/bash # usage: sshc host command [arg …] # Escapes its arguments so that the […]

在一个文件中使用列的一部分作为其他文件中的search项

我有两个文件。 我正在search的输出文件有地震位置,格式如下: 19090212 1323 30.12 36 19.41 103 28.24 7.29 0.00 4 149 25.8 0.02 5.7 9.8 D – 0 19090216 1828 49.61 36 13.27 101 35.38 10.94 0.00 13 54 38.5 0.07 0.3 0.7 B 0 19090711 2114 54.11 35 1.07 99 56.42 7.00 0.00 7 177 18.7 4.00 63.3 53.2 D # 0 […]

自动更改bash脚本中的variables

我有一个名为variable.sh的脚本,并包含许多variables的集合,如下所示: var1=variable1 var2=variable2 var3=variable3 var4=variable4 var5=variable5 我需要运行一个命令,它将改变variable.sh中variables的位置。 当我运行命令时,variables会保持不变。它将变成如下: 第一次改变: var1=variable2 var2=variable3 var3=variable4 var4=variable5 var5=variable1 第二个变化: var1=variable3 var2=variable4 var3=variable5 var4=variable1 var5=variable2 有没有可能的命令来做上述的改变? 我在Ubuntu中使用bash脚本。 谢谢

调用交互式下标并将其输出保存到variables中

我目前有一个Perl脚本(我不能编辑),询问用户几个问题,然后将生成的输出打印到标准输出。 我想创build另一个脚本来调用这个脚本,允许用户像平常一样与之交互,然后把stdout的输出存储到一个variables中。 这是我想要完成的一个非常简单的例子: inner.pl #!/usr/bin/perl print "Enter a number:"; $reply = <>; print "$reply"; outer.sh (根据Op De Cirkel 在这里的答案) #!/bin/bash echo "Calling inner.pl" exec 5>&1 OUTPUT=$(./inner.pl | tee >(cat – >&5)) echo "Retrieved output: $OUTPUT" 期望的输出: $ ./outer.sh Calling inner.pl Enter a number: 7 7 Retrieved output: 7 然而,当我尝试这个时,脚本会在“挂起”之前输出Calling inner.pl ,而不从inner.sh中打印任何内容。 我已经find了一些解决方法,使用script命令将整个inner.sh交换存储到一个临时文件,然后使用sed等来修改它以满足我的需要。 但是为这样一些相当琐碎的东西创build临时文件并没有什么意义(更不用说script喜欢在所有内容上添加时间戳和\r s)。 有没有非script方式来完成这个?

重写在bash中的二维数组单元格

我尝试在bash中设置下面的二维数组: $ a[0,0]=a0 $ a[1,0]=a1 $ echo ${a[0,0]} a1 我期望得到a0 ,我错过了什么?

如何模拟在linux bash中按箭头键

我曾与PowerShell的工作,但我是新的Linux bash脚本。 假设我想写一个脚本,按一个按键(左箭头)定期(0.05s)。 我怎么能这样做?

从linux命令获取屏幕上的输出

我试图得到一个命令的输出,但我不能得到它。 如果我手动运行,它会在屏幕上返回正常的结果。 [root@mymachine ~]# dnsdist -e "topQueries()" 1 Rest 0 100.0% 我试着用dnsdist -e 'topQueries() 2>&1 1> /tmp/abc 。 但是/tmp/abc仍然是空的。 我不认为screen命令可以解决它。 有没有人有任何build议? 补充信息: 1rest0 100.0% 是topQueries()的结果。 '-e'表示在dnsdist中执行一个命令。 它看起来像我们访问MySQL然后我们调用一个SQL语句。

bash`read -t`在pipe道上不起作用

演示这个非常简单的方法是运行 mkfifo /tmp/a read -t 1 a < /tmp/a 阅读永不回报。 Bash手册说:这个选项只有在读取从terminal,pipe道或其他特殊文件读取input时才有效; 从常规文件读取时不起作用 但是/ tmp / a是一个pipe道,ls的输出是 ls -l /tmp/a prw-r–r– 1 root root 0 Feb 4 22:18 /tmp/a bash版本是: GNU bash,版本4.3.46(1)-release(x86_64-pc-linux-gnu)Copyright(C)2013 Free Software Foundation,Inc. 操作系统是: Ubuntu 16.04.1 LTS

如何处理每个结果 – 而不是grep(oz)命令(早于2.25)

从版本2.25开始,grep中的一个“bug”是固定的,所以空字节而不是新行被用来终止输出行。 这很好用,因为捕获和处理多行grep匹配非常简单(请参阅示例) 不幸的是,我在生产中遇到了grep 2.20版本。 这意味着对于处理\ n结尾的日志文件,您不能区分grep-match与每一行输出。 所以我的问题是: 什么是最有效的方法来处理每个结果 – 而不是grep(盎司)命令的行,当你坚持一个版本比2.25年龄? (注意:这是一个更复杂脚本的小例子,需要根据请求处理超过10k个大日志文件,因此我追求“最高效”的解决scheme) 一个简单的例子: test.log中 flag test1 flag test2 flag test3 test4 test5 flag test6 test7 flag test8 test.sh #!/bin/bash #regex explained: #(?s)enable multiline pattern search #(flag) capturegroup with pattern indicating new entry #[[:blank:]] followed by a space #(.*?) capturegroup for the rest of the entry, non-greedy […]

要求:主机名,而试图安装鱼壳

我试图在更新的Amazon Linux机器上安装Fish Shell,我不断收到错误消息: Requires: hostname 我尝试了在Fish Shell网站上为CentOS 6和7提供的两个存储库,在尝试另一个之前删除这两个存储库。 Nettools已安装,它是标准的Amazon Linux安装,因此它具有所有的基础知识。 如果任何人都可以帮助,将不胜感激! 提前致谢!