Questions tagged «shell-script»

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



5
将Bash CD放到特定文件夹中
我在Magento做很多工作,所以和我一起工作的很多人也在做,不得不输入以下内容很烦人: cd ../../../../../../ 为了仅从根目录“ httpdocs”文件夹中找到几个目录,因此我尝试制作一个遵循此伪代码的脚本: while lowest level directory != httpdocs cd ../ end while; 看起来很简单,我假设我必须做某种形式的grep检查当前工作目录的最后一部分是否是httpdocs,如果不是一直保持到真正的水平的话。 我一直在为此目的学习bash,尽管似乎已经有一些类似的东西,而且语法使我无休止。




7
有没有办法防止sed解释替换字符串?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 如果要使用sed将关键字替换为字符串,sed会尝试解释您的替换字符串。如果替换字符串碰巧包含sed认为特殊的字符(例如'/'字符),则它将失败,除非您当然是要让替换字符串包含告诉sed如何操作的字符。 例如: VAR="hi/" sed "s/KEYWORD/$VAR/g" somefile 有没有办法告诉sed不要尝试解释特殊字符的替换字符串?我想要的是能够用变量的内容替换文件中的关键字,无论该内容是什么。
16 bash  shell-script  sed 

3
为什么我的文件夹名称最终会这样,以及如何使用脚本解决此问题?
抱歉,如果在其他地方都可以找到答案,我不知道如何搜索我的问题。 我在redhat linux HPC服务器上运行了一些模拟,而我用于处理文件夹结构以保存输出的代码有一个不幸的错误。我创建文件夹的matlab代码是: folder = [sp.saveLocation, 'run_', sp.run_number, '/']; 在哪里sp.run_number是整数。我忘了将其转换为字符串,但是由于某种原因mkdir(folder);(在matlab中)运行仍然成功。实际上,模拟运行顺利,数据已保存到匹配目录。 现在,当查询/打印文件夹结构时,出现以下情况: 当我尝试标签自动完成时: run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/ 当我使用ls:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?。 当我使用rsync传输到我的mac时,该--progress选项显示:run_\#003/等(与我假设)匹配的数字与sp.run_number填充的整数匹配为三位数,因此第10次运行是run_\#010/ 当我在finder中查看文件夹时 run_ run_ run_ run_ run_ run_ run_ run_ run_ run_? 查看此问题并使用命令,ls | LC_ALL=C sed …

6
如果Bourne shell在发行版中不可用,则在hashbang中使用/ bin / sh是否正确?
通常,shell脚本在脚本文件的第一行包含以下注释:#!/bin/sh。根据我所做的研究,这称为“哈希爆炸”,这是常规注释。该注释通知Unix该文件由Bourne Shell在目录下执行/bin。 我的问题从这一点开始。到目前为止,我还没有看到这样的评论#!/bin/bash。一直如此#!/bin/sh。但是,Ubuntu发行版没有Bourne Shell程序。他们有Bourne Again Shell(bash)。 在这一点上,将注释#!/bin/sh放在用Ubuntu发行版编写的Shell脚本中是否正确?

8
如何在bash中测试数组元素是否全部相等?
以下数组表示每台Linux机器上的磁盘数 每个单个阵列都包括linux计算机上的磁盘数。 echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 识别所有数组值相等的简单方法是什么? 良好状态: 4 4 4 4 4 4 4 4 不良状态: 4 4 4 4 4 4 2 4 不良状态: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 

3
头吃多余的字符
预期以下shell命令仅输出输入流的奇数行: echo -e "aaa\nbbb\nccc\nddd\n" | (while true; do head -n 1; head -n 1 >/dev/null; done) 但是,它只是打印第一行:aaa。 与-c(--bytes)选项一起使用时不会发生相同的事情: echo 12345678901234567890 | (while true; do head -c 5; head -c 5 >/dev/null; done) 该命令1234512345按预期输出。但这仅在该实用程序的coreutils实现中有效head。该busybox的执行还是吃多余的字符,所以输出正好12345。 我想这种特定的实现方式是出于优化目的而完成的。您不知道行的结尾,因此不知道需要读取多少个字符。不消耗输入流中多余字符的唯一方法是逐字节读取流。但是一次从流中读取一个字节可能很慢。因此,我想head将输入流读取到足够大的缓冲区中,然后计算该缓冲区中的行数。 --bytes使用option 时无法说相同的话。在这种情况下,您知道需要读取多少个字节。因此,您可以准确地读取此字节数,但不能超过此数目。该corelibs实现使用这个机会,但是busybox的一个没有,它仍然比读取所需到缓冲区的字节以上。这样做可能是为了简化实现。 所以这个问题。head实用程序从输入流中消耗比要求更多的字符是否正确?Unix实用程序是否有某种标准?如果存在,是否指定了这种行为? 聚苯乙烯 您必须按Ctrl+C停止上面的命令。Unix实用程序不会在超越时失败EOF。如果您不想按,则可以使用更复杂的命令: echo 12345678901234567890 | (while true; do head -c 5; head -c …




6
使用“保留”代码获取shell脚本的退出状态
最近,我从《高级Bash脚本指南》中发现了具有特殊含义的退出代码列表。他们将这些代码称为保留代码,并建议: 根据上表,退出代码1-2、126-165和255具有特殊含义,因此对于用户指定的退出参数应避免使用。 前一段时间,我编写了一个脚本,该脚本使用以下退出状态代码: 0-成功 1-错误的主机名 2-指定了无效的参数 3-用户权限不足 当我编写脚本时,我不知道任何特殊的退出代码,因此我只是从第一个错误条件的1开始,然后为每种连续的错误类型增加了退出状态。 我编写该脚本的目的是,在以后的阶段可以被其他脚本调用(可以检查非零退出代码)。我实际上还没有这样做;到目前为止,我只从交互式外壳程序(Bash)运行脚本,并且我想知道使用自定义退出代码可能导致什么/是否有问题。《高级Bash脚本指南》中的建议的相关性/重要性如何? 我在Bash文档中找不到任何确凿的建议;它的“ 退出状态”部分仅列出了Bash使用的退出代码,但未声明保留其中任何一个或警告您不要将其用于自己的脚本/程序。

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.