Questions tagged «shell-script»

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


4
Bash脚本通过测试命令返回状态来检测版本控制系统
我正在开发一个bash脚本,该脚本要用于几种类型的VCS。我正在考虑通过运行典型的info命令并检查返回码,成功或错误来测试目录是否是系统的存储库。用伪代码: if a svn command succeded; Then run svn commands elif a darcs command succeded; Then run darcs commands elif a mercurial command succeded; then run hg commands else something else fi 我可以运行一个命令,例如, darcs show repo并用于$?获取其返回代码。 我的问题是:是否有一种巧妙的方法可以在一行中运行并返回返回码号?例如 if [ 0 -eq `darcs show repo`$? ]; 还是我必须定义一个功能? 附加要求是应同时打印stderr和stdout。

2
为什么#!/ usr / bin / env bash在我的系统上不起作用?
在运行一些他们抱怨的安装脚本时,我遇到了一些问题bad interpreter。 因此,我举了一个简单的例子,但我无法弄清楚问题出在哪里,请参阅下文。 #!/usr/bin/env bash echo "hello" 执行上面的脚本会导致以下错误 [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory 该/usr/bin/env文件存在,请参见下文: [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul 16 …


3
按任意键暂停外壳脚本,再按一次继续
我已经编写了一个Shell脚本来测试一种API,该API复制文件并在每次复制后回显其进度。 每个副本之间有两秒钟的睡眠时间,因此我想增加按任意键暂停脚本以进行更深入测试的功能。然后按任意键继续。 如何在尽可能少的行中添加?


2
多行命令:注释掉一行
我喜欢在脚本中使用以下格式来编写带有很多参数的命令(以提高可读性): docker run \ --rm \ -u root \ -p 8080:8080 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$HOME":/home \ jenkinsci/blueocean 但是,有时我想将这些参数之一注释掉: # -p 8080:8080 这不起作用,因为EOL被解释为return并且命令失败。也尝试过这个: \ # -p 8080:8080 这也没有用。 问题:有没有办法注释掉参数,所以它仍然在自己的行上,但是我能够执行脚本?

4
bash函数的隐式返回?
说我有一个bash函数,如下所示: gmx(){ echo "foo"; } 此函数将隐式返回echo命令的退出值,还是使用return是必需的? gmx(){ echo "foo"; return $? } 我假设bash的工作方式是,bash函数的最后一条命令的退出状态是“返回”的状态,但不能100%确定。

1
将SIGINT或SIGTERM发送给父脚本本身而不是子进程时执行命令或函数
假设我有这个 script.sh #!/bin/bash exit_script() { echo "Printing something special!" echo "Maybe executing other commands!" kill -- -$$ # Sends SIGTERM to child/sub processes } echo "Some other text" #other commands here sleep infinity 我想script.sh执行的功能exit_script时,它接收SIGINT或SIGTERM 例如: killall script.sh # it will send SIGTERM to my script 我希望我的脚本执行此操作 exit_script() { echo "Printing …


1
避免显示“与<host>的共享连接已关闭”消息
我正在管理许多drupal网站,并尝试使用drush自动化一些操作。使用站点别名的配置中指定的选项,Drush通过ssh在远程主机上本地调用drush。我进行了大量此类调用,因此为了加快速度,我将持久性ssh连接与ssh config一起使用,如下所示: Host * # see http://www.revsys.com/writings/quicktips/ssh-faster-connections.html ControlMaster auto ControlPath ~/tmp/%r@%h:%p ControlPersist 3600 我得到了提速,但是我也收到了这样的消息: $ drush @alias drupal-directory webform /var/local/www/example.com/htdocs/sites/all/modules/contrib/webform Shared connection to 12.34.56.78 closed. 关于共享连接的消息以及我想要的输出(严重?为什么不是stderr?)在stdout上,所以当我尝试在脚本中捕获输出时,这会引起问题: directory=$(drush @$alias drupal-directory $module) 我希望主连接是我已经打开的连接,但看起来并没有关闭。那么,也许匆匆忙忙地明确地使这个新连接成为主连接并关闭它?无论如何,有没有办法抑制有关连接关闭的消息? [这个问题是在drupal / drush上下文中,但是我认为它本质上是关于ssh的。这是正确的网站吗?] 编辑: 看来问题是特定-t于ssh选项的使用位置。我之所以使用它,是因为需要在各个点输入svn密码,如果没有-t,则不会显示密码提示。也许还有另一种方法可以阻止这些提示丢失?

1
为tcpdump捕获创建多播联接
我想编写一个Linux Shell脚本来捕获特定的多播流量。具体来说,我想创建一个pcap文件,其中包含一个特定多播组/端口的所有流量。 这是我用来查看流量的命令行: tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234 只要我已经建立了对该组的多播订阅,就可以正常工作。例如,如果我在另一个控制台中运行此命令: mdump 233.54.12.234 22001 10.13.252.51 tcpdump将看到数据包。如果mdump没有运行,tcpdump什么也看不到。 在开始捕获之前,是否有标准的linux-y方法来建立这些多播联接?我可以mdump用来建立这些联接,但这似乎很浪费,因为mdump它将处理组中的所有数据,但是我只是将其丢弃。 请注意,由于我的特定环境,我们不建议将接口置于混杂模式。实际上,它可能被禁止。


6
重击-配对文件的每一行
这个问题是密切相关的这个和这个问题。我有一个包含多行的文件,其中每一行都是文件的路径。现在我要配对的每一行与每一不同的线(未本身)。就我的目的而言,一对A B也等于一B A对,因此仅应产生这些组合中的一个。 例 files.dat 以简写形式读取,每个字母都是文件路径(绝对或相对) a b c d e 然后我的结果应该是这样的: a b a c a d a e b c b d b e c d c e d e 最好是我想用bash解决这个问题。与其他问题不同,我的文件列表很小(大约200行),因此使用循环和RAM容量不会造成任何问题。

5
捕获退出命令的退出代码
我在bash脚本中有这个: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi 看起来它将在退出命令后立即退出,这很有意义。我想知道是否有一些简单的命令可以提供退出代码而无需立即退出? 我当时在猜测: exec exit 3 但它会显示错误消息:exec: exit: not found。我能做什么?:)

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.