Bash 遍历参数,跳过第一个

你好,我有以下信息: bash_script parm1 a b c d ..n 我想迭代并打印命令行中从a开始的所有值,而不是从parm1开始这应该可以做到: #ignore first parm1 shift # iterate while test ${#} -gt 0 do echo $1 shift done 另一种风格,稍微短一点,保留参数列表 shift for i in "$@" do echo $i done 可以在bash中“切片”数组;您可以使用 for

Bash 如果“source”是另一个文件,则在won';之前定义的“trap INT”;不行?

如果我把它放在Bash脚本的顶部,Control+C就不起作用了 exit-function() { echo "Hey hey!" } trap exit-function INT 但如果我把它放在后面几行,那么控制+C就被困住了 更新: 如果它放在源“$HOME/.rvm/scripts/rvm”之后,则它可以工作。 因此,如果您源于另一个文件,以前定义的trap INT将不起作用?rvm脚本源的其中一个脚本将设置一个trap,它将替换您先前设置的陷阱。通过在rvm脚本之后设置

选项卡上的Bash变量展开完成

我正在运行Ubuntu11.04,当我试图在bash中使用以变量开头的路径上的制表符补全时,我看到了一些奇怪的行为。如果我有TOP=/scratch,并且我尝试使用tab complete: cd$TOP/foo 改为: cd\$TOP/foo 我希望它能够完成,而不是: cd$TOP/foobar 或 cd/scratch/foobar 但我会接受它只是不改变路线,并要求我取消逃脱美元 有人知道我应该在bash/readline中的什么地方修复此问题吗?找到错误报告,请注册(如果尚未注册)并将

Bash UNIX sort-m命令的空间优化?

我正在尝试运行一个排列测试,它涉及到将一千个非常大的预排序文件合并成一个巨型排序文件 当前运行的一些文件甚至比我通常合并的文件还要大(每个68M到106M) 我没有足够的硬盘空间同时用于输入、临时中间产品和输出。有没有一种方法可以使用sort以破坏性方式合并所有这些文件 以下是我当前使用的命令: sort -T /media/WD_Book/tmp --compress-program=gzip -g -k 6 -m *.rand.tab > /media/WD_Book/output/m

使用scala.sys.process执行bash字符串

我最近在Scala中发现了sys.process包,并被它的强大功能逗乐了 但当我尝试将它与bash管道和backticks结合起来时,我就卡住了 这显然不起作用: scala> "echo `date`" !! res0: String = " "`date` " 我尝试使用bash可执行文件来获得所需的行为: scala> "bash -e echo `date`" !! /bin/echo: /bin/echo: cannot execute binary file java

Java命令在bash上运行,在zsh上失败

考虑使用bash完美运行的以下命令: java -classpath bin:lib/* FunctionalTests.TestRunner 类位于bin,JAR位于lib,main()位于bin/FunctionalTests/TestRunner: . ├── bin ├── lib │   ├── commons-collections-3.2.1.jar │   ├── commons-httpclient-3.1.jar │   ├── commons-io-2.1.jar │  

Bash Shell脚本中if条件的参数太多

我当前的脚本执行以下操作: 它将整数作为命令行参数,从1到N开始,它检查数字是否可以被3、5或两者整除。它只需打印3的Uc、5的Bes和3,5的UcBes。如果命令行参数为空,它将执行相同的操作,但循环将转到1到20 我的错误是“第11、15和19行的参数太多” 代码如下: #!/bin/bash if [ ! -z $1 ]; then for i in `seq 1 $1` do if [ [$i % 3] -eq 0 ]; then

如何使用case';bash中的d操作数?

这是工作代码: nn=2 ((nn += ` case "2" in "1") printf 5 ;; "2") printf 10 ;; *) printf 20 ;; esac `)) echo $nn 我如何可以这样简化: nn=2 ((nn += ` case "2" in "1") 5 ;; "2") 10 ;; *) 20 ;; esac `)) echo $nn case "$1" in 1) m=5 ;; 2)

我不喜欢的行为';我不懂bash

我有一个包含3个虚拟文件的文件夹:ab0、ab1和ab2 $ echo ab* ab0 ab1 ab2 $ myvariable=ab* $ echo $myvariable ab0 ab1 ab2 $ echo 'ab*' ab* 到现在为止,我想我明白了。但是: $ myvariable='ab*' $ echo $myvariable ab0 ab1 ab2 我期待着ab*。这意味着有一个基本的我不明白 我一直在bash教程和手册中搜索单引号与双引号、扩展以及更多内容,但我还没有找

Bash 将第二列从正数改为负数,反之亦然

如何将第二列从正数改为负数,反之亦然 aa.txt 31OCT2013:00:00:00,220.10,"O","090500 13549951" 31OCT2013:00:00:00,-0.32,"I","090500 13549964" 31OCT2013:00:00:00,-220.10,"O","090500 13549951" 31OCT2013:00:00:00,+0.32,"I","090500 13549964" 答案应该是 aa.txt 31OCT2013:00:00:00

如何在BASH中快速删除文件中包含另一个文件列表项的行?

我有一个名为words.txt的文件,其中包含一个单词列表。我还有一个名为file.txt的文件,每行包含一个句子。我需要快速删除file.txt中包含words.txt中一行的任何行,但前提是在{和}之间找到匹配项 例如,file.txt: Once upon a time there was a cat. {The cat} lived in the forest. The {cat really liked to} eat mice. cat mice 例如,words.txt: On

bash mv ever n文件到具有连续名称的不同子文件夹中

我正在尝试将目录中的n个文件移动到子目录。为了清楚起见,假设我有一个名为1999的文件夹。 我在/1999下有364个文件,这些文件是每天的数据文件。我想将这些文件移动到名为weeks(1-52)的子文件夹中。在本例中,我想将第1-7个文件移动到名为“1”的文件夹中,然后将第8-14个文件移动到名为“2”的文件夹中,并将第358-364个文件移动到名为“52”的文件夹中。所以我需要一个7的循环:)。如何在bash或ksh中执行此操作?以下是一个伪代码: Get timestamp of the

Bash 使用ssh登录后如何在新窗口中打开emacs

当我打开终端并键入“emacs”时,会打开一个新的emacs窗口。但在使用ssh登录到另一台主机后,键入“emacs”会在终端内创建一个emacs缓冲区 在使用ssh时,是否有任何方法可以指定希望在终端外部打开windows?也许在我的.bashrc中插入了什么 注意:我已经尝试使用“ssh-Y”而不是“ssh”。它不起作用 编辑:我不知道为什么它以前不工作,但现在“ssh-Y”和“ssh-X”都解决了我的问题。您需要的是导出X窗口 尝试: 如果Emacs未编译为使用窗口系统,您将无法执行此操作

Bash 文件编辑shell,但我的权限被拒绝

sudo echo“sadfsadf”>/etc/apache2/mods available/dir.conf 我使用sudo运行命令,但它返回错误:“权限被拒绝: 为什么此命令不起作用?sudo xxx>文件不按预期工作。xxx以root用户身份执行,但文件写入()仍以当前用户身份“执行” sudo-s,然后使用管道执行命令

Bash 防止'less-R'跨换行重新设置颜色

如何使用-R或其他方式告诉less,不要在换行符(\n)之间重置颜色?下面是我看到的一个例子: $ echo -e '\033[31mThis is red.\nStill red.\n\033[0mBack now.' >> coltest $ cat coltest This is red. #Colour is red Still red. #Colour is red Back now. #Colour is the terminal's foreground co

Bash 有选择地将文件压缩到50米

我想选择以“data*”开头的文件夹中的所有文件,并按日期选择最新的文件,以便所选文件的压缩zip文件不应超过50MB。如何在bash脚本中实现这一点 我可以迭代地将文件添加到zip文件夹并检查大小,但我必须确保首先添加最新的文件。使用ls-t选择最新的数据文件很简单。这将返回一个文件列表,这些文件按最近修改的内容排序,并且与字符串匹配。我会把这个列表放在一个.txt文件的某个地方 ls -t data* > lsResults.txt 至于拉链,那是反复试验。我不能告诉你一个文件在压缩

Bash 将PuTTY原始SSH输出转换为纯文本

我有一个来自PuTTY会话的240MB日志文件。这被错误地记录为“SSH数据包和原始数据”格式,而不是“所有会话输出”。如果在文本编辑器中打开文件,则可以看到所需的数据(纯文本) 问题是从原始数据中提取这些数据 例如: Incoming raw data at 2016-01-06 15:47:42 00000000 e8 fd c2 d2 88 a9 39 b9 2a 77 2a 7b 4a 60 fc 21 ......9.*w*{J`.! 00000010 1d f5 fc

用于安全传输的Bash脚本

想法很简单,我希望能够从我的系统执行scp命令,并将文件移动到另一台计算机,反之亦然 我的案子有个小问题。为了连接到终端计算机,我必须首先ssh到主机b,然后ssh到主机c 长话短说,我必须先将所有文件复制到主机b,然后再复制到主机c 这是scematic: my_computer -> host_b -> host_c 由于每次都要手动运行我的代码,我不得不这样做,这有点令人沮丧,所以我想我应该自己编写脚本来自动化这个过程 以下是我目前的代码: #!/usr/bin/expect

Bash 如何使用sed更改awk变量

我有一个bash命令,它生成一个文件列表,我需要修改文件名。 所以我想用这样的方法: mycommand | awk {mv $1 altered$1} 问题是第二个$1应该被修改为一些正则表达式。 如何将sed应用于第二个参数 我试过使用$()和|,但不起作用 我也试过了 awk '{print $1 sed "s/[^A-Za-z0-9._-]/_/g" <<< $1}' awk: cmd. line:1: Unexpected token awk'{print$1 s

在bash脚本中并行运行数组中的每个元素

假设我有一个bash脚本,如下所示: array=( 1 2 3 4 5 6 ) for each in "${array[@]}" do echo "$each" command --arg1 $each done array=( 1 2 3 4 5 6 ) for each in "${array[@]}" do echo "$each" lags=($(command --arg1 $each) lngth_lags=${#lags[*]} for (

Bash 无法使用脚本终止进程并启动同一进程

我试图终止一个进程并启动同一个进程 当我在命令行上使用pkill终止进程并使用nsd启动服务时,它工作得很好。但当我在脚本中使用相同的命令时,会显示以下错误: nsd[18652]:通知:nsd启动(nsd 4.1.15) nsd[18652]:错误:无法绑定udp套接字:地址已在使用中 nsd[18652]:错误:服务器初始化失败,无法启动nsd 开始 错误:连接(127.0.0)。1@8952):连接被拒绝 script.sh包含 pkill nsd nsd nsd-control re

Bash 使用sed忽略文件的开头并在字符串中的其他地方匹配regex

所以我试图解决我面临的一个解析问题 我有一个日志文件,它在每行的开头都包含伪随机字符串。它们可以是任何东西,但长度始终相同,这是我希望保留的第一个数据集(例如start-of-log-001-),由19个字符组成,包括空格 start-of-log-001 - bacon bacon email1@email.com bacon metadata123 bacon 123 bacon start-of-log-002 - bacon bacon metadata123 bacon email2@

如何在打开时执行bash脚本

我试图创建一个bash脚本,在ubuntu16.04环境中的gui中单击打开一段时间后运行。关于如何着手做这件事有什么建议吗 正在处理学校项目以创建勒索软件。尝试在单击文件后获取要执行的代码。打开是什么意思?是否只想设置脚本的执行权限?我正在处理学校项目以创建勒索软件。试图找出打开时要执行的代码。打开文件时?更改权限:chmod+x使其成为“可执行”

Bash函数检查是否设置了给定变量

如中所述,检查bash中是否设置了变量的“正确”方法如下所示: if [ -z ${var+x} ]; then echo "var is unset" else echo "var is set to '$var'" fi 我感兴趣的是如何将其提取到一个可以为不同变量重用的函数中 到目前为止,我能做的最好的事情是: is_set() { local test_start='[ ! -z ${' local test_end='+x} ]' local tester

BASH-如何使用sed删除包含模式字符串第二次出现的行

考虑下面的配置文件,它有两个alt\u name实例。在这里,我想删除第二次出现模式alt\u names的行 . . [ server ] subjectAltName = @alt_names . . [ alt_names ] 我尝试了sed命令,但它删除了模式出现的所有行。我使用下面的命令这样做 #sed '/alt_names/{2,$d}' inputfile 下面将删除包含alt\u名称的第二行。计数器c将随着模式匹配的每一行而增加 awk '/alt_names/{c++;

bash-seq替换({1..10})中的变量

是否可以这样做: start=1 end=10 echo {$start..$end} # Ouput: {1..10} # Expected: 1 2 3 ... 10 (echo {1..10}) 您必须使用eval: eval echo {$start..$end} 你应该考虑使用 SEQ(1)< /代码>。您还可以使用eval: eval echo {$start..$end} 下面是seq seq -s' ' $start $end 我通常只是这样做: echo `seq $s

Bash CSV是否获得列?

如何在bash中抓住整个2个单词?我已经尝试过,我所能做的就是使用echo$a tr-s'| cut-d,-f3获取两个单词,但每个单词都会放在自己的行中,如:- row1 row2 row3 Hello, World, Hello World World, Hello, World Hello 使用带有自定义字段分隔符的awk作为空格或逗号: Hello World World Hello 这是一个.csv文件,为什么要使用echo$a?提供清晰

Bash和file命令示例大小

我正在编写一个bash脚本来自动处理一些文件,其中一个主题是使用iconv对源文件重新编码(如果它们不符合我的喜好)。为此,我使用: enc=$(file -b --mime-encoding "$file") # get the encoding if [ "$enc" = "iso-8859-1" ] || [ "$enc" = "us-ascii" ] # no need to encode these then

自定义bash自动完成

如何自定义bash autocomplete,以便只为一个脚本选项(-seq)列出另一个目录中的文件,为其他脚本选项(-speed,-define)列出默认的autocomplete是可以的。这就是我所拥有的 export files=`ls /home/tests/` echo $files #debug _xtest () { . local cur COMPREPLY=() cur=${COMP_WORDS

Bash 解析awk中已解析的列

我正在尝试使用awk解析如下所示的文本文件: 001 data John Smith address "London" | occupation "Driver" | exercise_level "Medium" 002 data Rob Edward address "Cardiff" | occupation "Physiotherapist" | exercise_level "High" 003 data Dara Pronk address "

如何在bash中将find命令与管道一起使用?

目录结构如下所示 home --dir1_foo ----subdirectory..... --dir2_foo --dir3_foo --dir4_bar --dir5_bar 我试图先使用'find'命令来获取包含特定字符串的目录(在本例中为'foo'),然后再次使用'find'命令来检索一些与条件匹配的目录 所以,我首先尝试了 #!/bin/bash for dir in `find ./ -type d -name "*foo*" `; do for subdir in `f

Bash 使用wget时出现Shell脚本错误

我制作了一个简单的bash脚本,可以从url下载图片。但是,这不起作用,我一直收到错误bash命令subsitution:在输入中忽略空字节 如何修复此问题?wget-O-以二进制形式打印图片。然后您的脚本尝试执行此操作,因为您将其放入了$(),这是错误消息的来源 您需要做的是将从wget获得的图片的二进制流传递给一个可以解释它的程序。例如,您可以使用feh(1) wget-qO-http://apache.org/images/asf_logo.gif |feh- [1] 我正在使用的$url

Bash:将命令组的输出分配给变量

虽然可以将shell命令的输出分配给如下变量: list=$(ls -la) 似乎我无法将命令组的输出分配给变量。这似乎不起作用: output=${ echo "Peter"; echo "Pan"; } 但是:通过管道传输命令组[1]的输出是可能的: { echo "To: $MAILTO" echo "From: $FROM" echo "Subject: $SUBJ" echo echo "Please check $HOSTNAME" } | ssmtp $MAILTO

带时间的bash if语句

我正在尝试测试一个日期…如果它在这两个时间框架之间,我想打印它们。。。 但我有错误……这是我的脚本 today_time=$(date +%H:%M:%S --date '-1 sec') today_dow=$(date +"%u") today_less=$(date +%H:%M:%S --date '-1 min') today_more=$(date +%H:%M:%S --date '+1 min') echo $today_less echo $today_time echo $

Bash 使用grep删除css注释

我正在编写一个脚本,该脚本将删除如下注释: /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ /* Document ========================================================================== */ /** * 1. Correct the line height in all browsers. * 2.

在带有bc-l的bash中添加/分耙/多重浮动

这么简单的任务我有点麻烦 请在下面查找相关代码: loewdin_fuk=$(echo $line_fukui|awk '{print $4}') nbo_fuk=$(echo $line_fukui|awk '{print $5}') echo "loewdin_fuk $loewdin_fuk nbo_fuk $nbo_fuk" aver_fuk=$(($loewdin_fuk + $nbo_fuk)) \#aver_fuk=$(echo "scale=4; 0.5*($loe

Bash 如何使用空格字符对值进行迭代?

我有以下资料: directories="directory_1 directory_2" for k in ${directories}; do echo "${k}" done; 问题是,如果我添加了一个名称中有空格的目录,例如目录3,这将失败,因为它被视为两个字符串。使用数组: A=( foo "bar a" blub ) for k in "${A[@]}"; do echo "$k" done 印刷品: foo bar a blub 福 酒吧 布鲁布

Bash For loop-复制多个文件并在不同目录中重命名扩展名

我想用.hml扩展名将所有.txt扩展名文件从copy_loc目录复制到pass_loc目录 past_loc="/Users/Desktop/newdir" copy_loc="/Users/Desktop/*.txt" for file in $copy_loc; do scp "$file" "$(basename "$file" .txt).hml" done 我不想移动文件,只要用扩展名.hml复制到新位置即可 past_loc="/Users/Desktop/newdir"

Bash 跟踪多个文件并从文件中输入搜索词,输出使用文件名搜索的项目

此功能目前运行正常,要添加以下功能: 从mygrepitemslist.txt(逐行)中导入搜索项目,而不是明确说明error1和error2(如果搜索中可以包含空格,则会获得额外奖励) 换言之,您需要读取文件mygrepitemslist.txt 在这个代码示例中,通过管道连接到grep 而不是在下面的代码中: grep“error1\| error2” mygrepitemslist.txt具有: 错误1 错误 带空格的错误3 带有多个空格的error4 我想使用我所拥有的,主要是因为我使用

如何在bash中检查无限循环?

我多次尝试使用bash运行可执行文件。这个可执行文件有可能会陷入无限循环或segfaults。我知道bash中没有try-catch,但我们可以使用以下方法绕过它: { #try "myCommand" && "do what i want" } || { #except "handle error" } 但这并不能理解无限循环。如何处理此问题?除非循环发送信号或修改系统/环境,否则Bash无法告诉您myCommand中发生了什么。你可以在后台运行你的#try&

Bash 在Jenkins中执行liquibase命令时权限被拒绝

当我试图以shell命令的形式执行liquibase命令时,我得到了这个权限被拒绝的错误 我已经为liquibase可执行文件授予了必要的权限 这在jenkins的早期版本中运行良好,并在升级jenkins后开始出现此错误 当前詹金斯版本:2.168 感谢您为解决此问题提供的任何帮助。在调用liquibase之前,我会在您的shell脚本中添加对whoami的调用,以确保它使用正确的用户运行。@SteveDonie是jenkins用户,我已为该用户授予了执行权限。在调用之前,我会在您的s

Bash 运行ninv mvn clean verify时出现几个错误

Idk出了什么问题,我只想运行一个amq代理示例…这是我的完整settings.xml(我刚刚添加了jboss amq maven存储库配置文件&还添加了jboss amq maven存储库作为我的activeprofile,其余完全是默认的…) 在我看来,使用自定义存储库的最简单方法是在使用-s开关执行Maven时在命令行上指定自定义设置文件。在您的情况下,您应该执行以下操作: 解压Red Hat AMQ Maven存储库(例如AMQ-broker-7.5.0-Maven-repositor

Bash 通过ssh传递变量

我试图通过ssh传递变量,并编写了两个简短的测试脚本(bash) 这一步是在另一端执行脚本(并且至少部分有效) 我从执行“mms测试alpha one”开始 #!/bin/bash sshpass -p (password) ssh hellfire@192.168.0.11 'bash /scripts/mms2 "$@"' 执行的第二个脚本是: #!/bin/bash echo "$@" >/scripts/test1.txt 此脚本仅用于传输参数时进行测试 到目前为止,它

Bash 正确使用grep

我在主目录下有180个子目录。我需要在所有180个子目录的add_report.rpt文件中grep“Unresponse”,如下所示: tile#t/PA#u输出/添加报告.rpt 其中#表示tile1_t,tile2_t。。。。。。瓷砖180_t(因为我无法使用*) 我在当前目录中尝试了以下操作: grep -r "Unresponse" 但我也从其他子目录以及在tile# 谁能帮我找到正确的去格雷普的路吗。 我只需要此路径的输出: tile#_t/PA_#_output/add_repo

Bash tr翻译带有66和99个引号的字符问题“”;

我正在使用tr命令删除标点符号,但它似乎没有删除66的和99的引号类型 以下是我使用的命令: cat test.txt | tr '[:punct:]' ' ' 这些:“ 它确实删除了常规代码,如:“ 想知道为什么吗?嗨,我想说,这里不是询问bash的好地方。尝试询问Ubuntu或超级用户(通过堆栈交换)。您更有可能得到对您有帮助的答案这是GNUtr的一个已知问题,详细介绍了解决方法。你的代码可以在macOS上运行。嗨,我想说的是,这里不是询问bash的好地方。尝试询问Ubuntu或超级用户(

在bash脚本中与jq一起使用sed

如何使用sed和jq将key name中的u替换为符号a {“产品名称”:“kl”} 应该成为 {“productaname”:“kl”} 在bash脚本中不需要sed;只需jq就可以轻松完成: $ jq '{ productaname: .product_name }' <<<'{ "product_name":"kl" }' {"productaname":"kl"} $jq'{product

从bash中的长字符串中提取最后出现的单词

我有一个长字符串,同一个单词多次出现,比如:“key:value”。我想从bash中的字符串中提取这个单词的最后一次出现。谁能帮我在bash中实现它 我的字符串如下所示: asaadfssffkey:valueaaddsdgfggfkey:valueadadfsfsffggg 并且,我尝试在bash:${parameter:offset:length}中提取子字符串,但这不是通用的,因为偏移量总是不相同的 我的预期输出将是word=>key:value的最后一次出现 我从执行jira chan

Bash 如何将变量放入makefile中的$(shell)命令中?

如何将for循环中的变量传递给$(shell)?我可以访问$(shell)之外的var,但我不知道如何将其传入: ❯ make --version GNU Make 3.81 ❯ bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18) 这是我得到的输出: A_LIST:= one two .PHONY: loop loop: @for iii in $(A_LIST) ; do \

向控制台和文件显示stdout和stderr,将stderr涂成红色,并在生成stdout和stderr时显示它们 我严格要求将*stdout*和*stderr*同时重定向到控制台和文件,并且*stderr*输出颜色为红色。 此外,*stdout*和*stderr*行应按生产顺序显示(我将更好地解释我的意思)。 我的问题是在bash脚本中实现这一点,因为每个单独的步骤实际上都不是一个大挑战。 a) 将*stdout*和*stderr*同时显示到控制台和文件 关于如何实现这一点,有很多信息。比如: mycommand 2>&1 | tee mylog.log

但是,正如前面所解释的,我需要的不仅仅是这些。 b) 控制台上的标准红颜色 同样,这不是什么大问题: exec 3>&1 mycommand 2>&1>&3 | sed $'s,.*,\e[31m&\e[m,' EXIT_CODE=${PIPESTATUS[0]} #exit status of command exec 3>&- #housekeepin

  1    2   3   4   5   6  ... 下一页 最后一页 共 585 页