Questions tagged «shell-script»

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


7
内置的冒号有什么作用?
我已经破解了许多shell脚本,有时最简单的事情使我感到困惑。今天,我遇到了一个脚本,该脚本大量使用了:内置的(冒号)bash。 该documenation似乎很简单: : (a colon) : [arguments] 除了扩展参数和执行重定向之外,什么也不要做。返回状态为零。 但是,我以前仅在用于shell扩展的演示中看到过这种用法。我遇到的脚本中的用例广泛使用了此结构: if [ -f ${file} ]; then grep some_string ${file} >> otherfile || : grep other_string ${file} >> otherfile || : fi 实际上有几百个抱怨,但更多的是相同的。除了上面的简单结构之外,没有输入/输出重定向。稍后在脚本中不检查返回值。 我将其视为无用的构造体,上面写着“或者什么也不做”。以“或什么都不做”来结束这些抱怨有什么目的?在什么情况下,这种构造会导致与简单地|| :从所有实例中删除结果不同的结果?

8
执行Shell脚本的不同方法
有几种执行脚本的方法,我知道的是: /path/to/script # using the path (absolute or relative) . script # using the . (dot) source script # using the `source` command 还有更多吗?它们之间有什么区别?在某些情况下,我必须使用一种而不是另一种?








3
如何在zsh中正确收集行数组
我认为以下内容将以行的形式对输出进行分组my_command: IFS='\n' array_of_lines=$(my_command); 因此,$array_of_lines[1]它将指向输出中的第一行my_command,$array_of_lines[2]指向第二行,依此类推。 但是,上面的命令似乎无法正常工作。就像我检查过的一样,它似乎也将my_command字符的输出分割开了,我相信它会逐行打印数组的元素。我也用以下方法对此进行了检查:nprint -l $array_of_lines echo $array_of_lines[1] echo $array_of_lines[2] ... 在第二次尝试中,我认为添加eval可能会有所帮助: IFS='\n' array_of_lines=$(eval my_command); 但我得到的结果与没有它时完全相同。 最后,按照zsh中带空格的List元素的答案,我还尝试了使用参数扩展标志,而不是IFS告诉zsh如何拆分输入并将元素收集到数组中,即: array_of_lines=("${(@f)$(my_command)}"); 但我仍然得到相同的结果(发生n) 有了这个,我有以下问题: Q1。有哪些“适当”的方式来收集多行代码中的命令输出? Q2。如何指定IFS仅在换行符上分割? Q3。如果我在上面的第三次尝试中使用参数扩展标志(即使用@f)来指定拆分,则zsh是否会忽略IFS?的值?为什么上面没有用?
42 shell-script  zsh 


4
递归查找最大文件
我试图递归地在目录中找到最大的文件。如果该目录内有一个子目录,则该函数需要进入该目录内,并检查是否存在最大的文件。找到最大文件后,将显示输出,并显示相对路径名以及最大文件的名称和大小。 例如: dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test class/asn dude.h.gch: 9481628 这就是我所拥有的: #!/bin/sh clear recursiveS() { for d in *; do if [ -d $d ]; then (cd $d; echo $(pwd)/$line; du -a; recursiveS;) fi done } recursiveS 我已经被卡住了一段时间了。我无法通过流水线化许多现有的Unix工具来实现这一点。任何想法都很好!


3
作为命令变量;评估vs bash -c
我正在阅读某人制作的bash脚本,发现作者没有使用eval将变量作为命令求值 。 bash -c "$1" 代替 eval "$1" 我认为使用eval是首选方法,无论如何它可能会更快。真的吗? 两者之间有什么实际区别吗?两者之间的显着区别是什么?

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.