Questions tagged «shell-script»

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

7
测试服务是否在脚本中运行的“正确”方法
我的问题: 我正在编写一个bash脚本,在其中我想检查给定的服务是否正在运行。 我知道如何使用手动进行操作$ service [service_name] status。 但是(尤其是自从移至systemd以来),它会打印出一堆很难理解的混乱文本。我假设有一个针对脚本的命令,该脚本具有简单的输出或可以检查的返回值。 但是,谷歌搜索只会产生大量的“哦,就是ps aux | grep -v grep | grep [service_name]”结果。那不是最佳实践,是吗?如果该命令的另一个实例正在运行,但不是由SysV初始化脚本启动的,该怎么办? 还是我应该闭嘴并用一点pgrep弄脏我的手?

2
括号是否真的将命令放在子外壳中?
根据我的阅读,将命令放在括号中应该将其运行在子外壳中,类似于运行脚本。如果是这样,如果不导出x,它将如何看到变量x? x=1 (echo $x)在命令行上运行会导致1 echo $x如预期那样,在脚本中运行不会产生任何结果

6
如何使用Shell命令删除ascii文件的前n行?
我在前5-10行中包含多个包含ascii文本信息的文件,其后是格式良好的矩阵信息。在shell脚本中,我想删除文本的前几行,以便可以在另一个程序中使用纯矩阵信息。如何使用bash shell命令执行此操作? 如果有帮助,我正在使用RedHat和Ubuntu Linux系统。

4
多行Shell脚本注释-这是如何工作的?
最近,我偶然发现了以前从未见过的多行注释类型-这是一个脚本示例: echo a # : aaa : ddd # echo b 这似乎是可行的,甚至在vim语法方面也很突出。这种评论方式叫什么,如何找到有关它的更多信息?

18
使用shell检测init系统
这可能与检测操作系统有关,但是我特别需要系统上当前使用的初始化系统。 Fedora 15和Ubuntu现在使用systemd,Ubuntu曾经使用Upstart(长期使用默认时间是15.04),而其他人则使用System V的变体。 我有一个要编写为跨平台守护程序的应用程序。初始化脚本是基于可以在configure上传递的参数动态生成的。 我只想为他们正在使用的特定初始化系统生成脚本。这样,安装脚本可以在没有参数的情况下作为root合理运行,并且可以自动“安装”守护程序。 这是我想出的: 在/ bin中搜索systemd,upstart等 将/ proc / 1 / comm与systemd,upstart等进行比较 询问用户 最好的跨平台跨平台方法是什么? 相关的一种,我可以依赖bash来依赖大多数* nix还是依赖于发行版/ OS? 目标平台: 苹果系统 Linux(所有发行版) BSD(所有版本) Solaris,Minix和其他* nix

13
如何比较外壳中的两个日期?
如何在shell中比较两个日期? 这是一个我想如何使用它的示例,尽管它不能按原样工作: todate=2013-07-18 cond=2013-07-15 if [ $todate -ge $cond ]; then break fi 如何获得理想的结果?


9
如何永远以优雅的方式无所事事?
我有一个程序,可以在上产生有用的信息,stdout但也可以读取stdin。我想将其标准输出重定向到文件,而不在标准输入上提供任何内容。到目前为止,一切都很好:我可以做到: program > output 而且不要在tty中做任何事情。 但是,问题是我想在后台执行此操作。如果我做: program > output & 程序将被挂起(“暂停(tty输入)”)。 如果我做: program < /dev/null > output & 该程序立即终止,因为它达到了EOF。 似乎我需要的是插入program不确定的时间内不做任何事情并且不读取的内容stdin。以下方法起作用: while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output & tail -f /dev/null | program > output & 但是,这一切都非常丑陋。有有是一种优雅的方式,使用标准的Unix工具,到“什么都不做,无限期”(意译man …

3
从脚本确定Git工作目录是否干净
我有一个rsync以Git工作目录作为目标运行的脚本。我希望脚本具有不同的行为,具体取决于工作目录是否干净(没有要提交的更改)。例如,如果输出git status如下,我希望脚本退出: git status Already up-to-date. # On branch master nothing to commit (working directory clean) Everything up-to-date 如果目录不干净,那么我希望它执行更多命令。 如何在shell脚本中检查上述输出?
82 shell-script  git 

3
在脚本中包含$“美元符号前缀的字符串”是什么意思?
我刚刚在初始化脚本中看到了这一点: echo $"Stopping Apache" 那美元符号是做什么用的? 到目前为止,我的研究: 我在bash手册中发现了这一点: 引号 如果设置,$'string'并且$"string"加引号内执行${parameter}双引号括起来的扩展。默认情况下启用此选项。 ...但是我没有发现带有和不带有$前缀的字符串之间的任何区别: $ echo "I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in ${PWD}" I am in /var/shared/home/southworth/qed $ echo "I am in ${PWD}" I am in /var/shared/home/southworth/qed …



7
我有多少深弹?
问题:查找我有多少壳深。 详细信息:我从vim打开了很多外壳。构建并运行并退出。有时我忘记了,打开另一个Vim,然后打开另一个shell。:( 我想知道我有多少深的贝壳,也许一直都在我的贝壳屏幕上。(我可以管理这部分)。 我的解决方案:解析进程树并查找vim和bash / zsh并找出其中的当前进程深度。 这样的东西已经存在了吗?我什么都找不到。
73 bash  shell-script  shell  vim  zsh 


3
如何测试Shell脚本的POSIX兼容性?
考虑到POSIX是所有unice中最通用的标准,我很想知道是否有专门支持它的shell。尽管大多数现代Shell提供对POSIX的支持(并且可以毫无问题地运行POSIX兼容脚本),但它们在指出不兼容功能方面表现不佳。 是否有仅实现POSIX和POSIX的外壳,以至于它会为任何不兼容的功能抛出错误? 编辑我想澄清的是,我并不是在寻求有关编写可移植Shell脚本的一般提示。评论中提到的相关问题已经解决了这一问题。当我发现bash有一个--posix选择但只发现它只影响某些初始化行为时,我想到了这个问题,而这并不是我要寻找的。

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.