Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

4
PIPE使用的Bash退出状态
我试图了解使用管道时如何传达退出状态。假设我要which用来查找不存在的程序: which lss echo $? 1 由于which找不到位置,lss我的退出状态为1。这很好。但是,当我尝试以下操作: which lss | echo $? 0 这表明最后执行的命令已正常退出。我能理解的唯一方法是,也许PIPE也会产生退出状态。这是正确的理解方式吗?
10 bash  shell-script  pipe  exit 

1
如何为使用`nohup`执行的程序设置环境变量?
(我正在编辑现有的Bash脚本,因此我可能在这里犯了一个愚蠢的错误...) 我有一个shell脚本,它以环境变量作为参数保存命令,如下所示: COMMAND="mvn clean install -P $MAVEN_PROFILE" 然后,它nohup大致如下执行命令: nohup $COMMAND > logfile 这可行。 现在,我想设置一个可以在Maven中访问的环境变量。我已经尝试了以下几种方法: COMMAND="FORMAVEN=valueForMaven mvn clean install -P $MAVEN_PROFILE" ...但随后它终止于: nohup: failed to run command `FORMAVEN=valueForMaven': No such file or directory 我觉得这里有几个不相关的概念在起作用,我都不了解甚至不知道。我需要什么才能做到以上几点?

5
在shell脚本中禁止来自MySQL的警告消息,但允许错误
使用某些基本的MySQL命令运行shell脚本时,我的日志文件随以下消息一起转储。 这是消息: “警告:在命令行界面上使用密码可能是不安全的。” 要停止这些消息,我正在使用以下作业定义。 例: run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1 此方法有效,但是未将MySQL错误记录到output.log。 如果我像下面这样更改定义,则MySQL错误开始出现(如果有) run_wrapper.sh > output.log 2>&1 因此,问题是如何仅使用cron定义来抑制警告消息并报告日志文件中的SQL错误?

7
如何重命名目录中所有带有特殊字符和空格的文件?
如何重命名特定目录中的所有文件,这些文件的名称中包含空格和特殊字符($和@)? 我尝试了以下rename命令,用_替换所有空格和特殊字符: $ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $ rename -n 's/ |\$|@/_/g' * $ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $ 该命令有效,但不会对文件名进行任何更改,也不会返回任何错误。如何解决此问题,还有其他方法吗?

6
如何使用bash删除重复文件
我有一个包含重复文件的文件夹md5sum(md5在Mac上,按(在Mac上)文件),我想要一个克朗 计划删除所有找到的作业。 但是,我仍然坚持如何执行此操作。到目前为止,我有: md5 -r * | sort 输出如下内容: 04c5d52b7acdfbecd5f3bdd8a39bf8fb gordondam_en-au11915031300_1366x768.jpg 1e88c6899920d2c192897c886e764fc2 fortbourtange_zh-cn9788197909_1366x768.jpg 266ea304b15bf4a5650f95cf385b16de nebraskasupercell_fr-fr11286079811_1366x768.jpg 324735b755c40d332213899fa545c463 grossescheidegg_en-us10868142387_1366x768.jpg 3993028fcea692328e097de50b26f540 Soyuz Spacecraft Rolled Out For Launch of One Year Crew.png 677bcd6006a305f4601bfb27699403b0 lechaustria_zh-cn7190263094_1366x768.jpg 80d03451b88ec29bff7d48f292a25ce6 ontariosunrise_en-ca10284703762_1366x768.jpg b6d9d24531bc62d2a26244d24624c4b1 manateeday_row10617199289_1366x768.jpg ca1486dbdb31ef6af83e5a40809ec561 Grueling Coursework.jpg cdf26393577ac2a61b6ce85d22daed24 Star trails over Mauna Kea.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x768.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x7682.jpg 如何根据文件的MD5进行处理以删除重复项?我并不在乎我保留哪个 “原始”字符,但我只想保留一个。 我是否应该以其他方式来处理这个问题?

1
使用getopts为一个选项提供两个参数
在下面的代码中,当我给出选项时,r则getopts需要一个参数: while getopts ":hr::l:" opt; do case $opt in r ) echo "Run Numbers - argument = $OPTARG " ;; l ) echo "Latency range - argument = $OPTARG" ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done 但是我需要在-r选项之后传递两个参数,而不是一个。是否有捷径可寻?

1
在Linux上将CSV转换为XLS文件
以下Perl脚本可以将CSV文件转换为XLS文件 问题是我需要在客户Linux机器上安装许多Perl模块 为了运行此Perl脚本,实际上我不能,因为Linux机器是客户机器(不允许安装模块) 所以我需要为这个Perl脚本找到其他选择 第一位客户拥有Linux红帽机器版本5.X 而且我想找到一些bash / ksh / sh / awk脚本,它们可以完成与perl脚本相同的工作 所以我想找到其他将CSV转换为XLS文件的替代方法 请咨询如何找到该脚本?或其他建议在Linux计算机上将CSV转换为XLS #!/usr/bin/perl -w ############################################################################### # # Example of how to use the WriteExcel module # # Simple program to convert a CSV comma-separated value file to an Excel file. # This is more or less an non-op …
10 linux  bash  shell-script  awk  perl 

3
将参数从文件传递到bash脚本
我有这种情况: ./ ./myscript.sh ./arguments.txt ./test.sh 在内部myscript.sh,我必须运行文件test.sh,并将其中包含的参数传递给它arguments.txt。 myscript.sh是: arguments=$(cat arguments.txt) source test.sh $arguments 如果arguments.txt最多包含一个参数,则此方法效果很好: firstargument 替换为: ++ source test.sh 'firstargument' 但是问题在于两个或多个参数。它这样做: ++ source test.sh 'firstargument secondargument' 另外,我也不知道内部的参数数量arguments.txt。可以为零或更多。

3
防止SIGINT传播到父进程
考虑到以下情况:父子程序(可以是C ++程序或Shell脚本)执行子Shell脚本,当我们在执行子Shell脚本时按Control + C(或配置为INTR的任何字符)时, SIGINT发送到前台进程组中的所有进程。这包括父进程。 资料来源:POSIX.1-2008 XBD第11.1.9节 有没有办法覆盖此默认行为?CHILD进程独自处理信号而没有传播给父进程吗? 参考:堆栈溢出后-子进程中断时父进程未完成(TRAP INT)

1
如何使用bash将多行附加到文件中,在字符串前面加上“-”
问题与如何使用bash将多行追加到文件中非常类似,但是我想使用来启动文件--,并且如果可能的话还希望追加到文件中。 printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test 问题是以“-”开头的文件给了我一个: -bash: printf: --: invalid option printf: usage: printf [-v var] format [arguments] 有办法逃脱--吗?有其他选择吗?我不确定如何使用进行多行操作echo,cat也不是一个好选择,我想将其包含在自动化脚本中。

1
尝试编写可继续远程测试服务器的shell脚本,但注销时该脚本始终落在else语句中
尝试在此处编写一个shell脚本,该脚本不断测试我的服务器,并在出现故障时向我发送电子邮件。 问题是,当我从ssh连接注销时,尽管&在命令末尾(如)运行ssh连接,它./stest01.sh &仍自动落入else并保持不间断地向我发送邮件,直到我再次登录并杀死它。 #!/bin/bash while true; do date > sdown.txt ; cp /dev/null pingop.txt ; ping -i 1 -c 1 -W 1 myserver.net > pingop.txt & sleep 1 ; if grep "64 bytes" pingop.txt ; then : else mutt -s "Server Down!" myemail@address.com < sdown.txt ; sleep 10 ; fi …

4
循环性能与扩展性能
需要以下比较的专家建议: 使用循环的代码段: for file in `cat large_file_list` do gzip -d $file done 使用简单扩展的代码段: gzip -d `cat large_file_list` 哪一个会更快?必须操纵大数据集。

3
如何防止不支持的“购物”选项引起我的.bashrc错误?
我在相对异构的环境中工作,其中我可能在不同的HPC节点,VM或我的个人工作站上运行不同版本的Bash。因为我将登录脚本放在了Git仓库中,所以我想全面使用相同.bashrc的命令,而不会出现很多“如果是此主机,则...”类型的混乱情况。 我喜欢 Bash≤4.1的默认行为,该行为会在按下键时扩展cd $SOMEPATH为。在bash 4.2及以上,则需要重新启用此行为,而这并没有变得可用,直到4.2.29。不过,这只是一个例子。另一个可能相关的选项(尽管我不确切知道它的作用)也可能更改了v4.2的默认行为。cd /the/actual/pathTabshopt -s direxpandshoptcomplete_fullquote 但是,direxpand早期版本的Bash无法识别该错误,如果我尝试在shopt -s direxpand中运行.bashrc,则每次我使用较旧的Bash登录到节点时,都会在控制台上显示一条错误消息: -bash: shopt: direxpand: invalid shell option name 我想做的是环绕一个条件,shop -s direxpand以一种健壮的方式在Bash> 4.1上启用该选项,而不会破坏Bash的旧版本(即,不仅仅将错误输出重定向到/dev/null)。

1
差异仅显示行内的差异
我想比较两个文件中的行,但为了最大程度地减少输出中的噪音,我只希望打印行中的实际差异。 例如,给定以下两个文件: a.txt a b c d e f g h i j k l m n o p q r s t u v w x y z b.txt a B c d e f g h i j k l m n o p q r s t …

3
“使”符号“可变”(后台处理)
我想知道是否有办法将&符放入变量中,并仍然使用它来将进程发送到后台。 这有效: BCKGRND=yes if [ "$BCKGRND" = "yes" ]; then sleep 5 & else sleep 5 fi 但是,仅用一条完成这五条线不是很酷吗?像这样: BCKGRND='&' sleep 5 ${BCKGRND} 但这是行不通的。如果未设置BCKGRND,则它可以工作-但是,如果设置了BCKGRND,则将其解释为文字'&'并输出错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.