我经常在网上看到用不同符号连接各种命令的教程。例如:
command1 | command2
command1 & command2
command1 || command2
command1 && command2
Run Code Online (Sandbox Code Playgroud)
其他人似乎将命令连接到文件:
command1 > file1
command1 >> file1
Run Code Online (Sandbox Code Playgroud)
这些是什么?他们叫什么?他们在做什么?还有更多吗?
或者,有关强大的文件名处理和在 shell 脚本中传递的其他字符串的介绍性指南。
我写了一个 shell 脚本,它在大多数情况下运行良好。但它在某些输入(例如某些文件名)上窒息。
我遇到了如下问题:
hello world
,它被视为两个单独的文件hello
和world
.\[*?
,它们会被一些文本替换,这实际上是文件的名称。'
(或双引号"
),在那之后事情变得很奇怪。\
分隔符)。这是怎么回事,我该如何解决?
我想下载并解压缩给定目录下的存档。到目前为止,这是我的做法:
wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2
Run Code Online (Sandbox Code Playgroud)
我想即时下载和解压缩存档,而无需将其tar.gz
写入磁盘。我认为通过管道输出wget
totar
并给出tar
目标是可能的,但实际上我不知道如何将这些部分放在一起。
在shebang中,#!
和解释器之间是否允许有一个或更多的空间?
例如,#! /bin/bash
。看起来可行,但有人说这是不正确的。
在维基百科上,.sh的文章说:
有关 .sh 文件扩展名类型,请参阅Bourne shell。
其他unix shell怎么样?
我知道在文件中 使用shebang来指示要执行的解释器,但我想知道:
shell ×4
shell-script ×2
bash ×1
control-flow ×1
conventions ×1
filenames ×1
files ×1
pipe ×1
quoting ×1
scripting ×1
shebang ×1
tar ×1
wget ×1
whitespace ×1