我经常在网上看到用不同符号连接各种命令的教程。例如:
command1 | command2
command1 & command2
command1 || command2
command1 && command2
Run Code Online (Sandbox Code Playgroud)
其他人似乎将命令连接到文件:
command1 > file1
command1 >> file1
Run Code Online (Sandbox Code Playgroud)
这些是什么?他们叫什么?他们在做什么?还有更多吗?
我知道运算符 ';'、'&'、'&&' 或 '||' 的相对绑定优先级
http://www.gnu.org/software/bash/manual/bashref.html#Lists
但是当管道与“&&”一起出现时,我很难理解绑定强度,要么偶然发现正确的命令,要么就放弃。
'|' 的绑定优先级是什么 和 '>' 相比?
我感到困惑的示例:
ls _thumbnails/video.mp4.jpg 2>/dev/null
&& echo "thumbnail already generated. Not regenerating" \
&& exit \
|| ffmpeg_thumbnail_create video.mp4 2>/dev/null \
&& ls _thumbnails/video.mp4.jpg \
&& echo "Thumbnail successfully created" \
&& exit \
|| echo "Thumbnail creation failed" \
| tee ~/thumbnails.log
Run Code Online (Sandbox Code Playgroud)
上面的目标是当且仅当一个缩略图不存在时创建一个缩略图(我每天运行一个 cronjob)。而且我不喜欢 ffmpeg 在没有错误时的大量输出(这不是 Unix 方式)。还有其他情况,所以不要开始给我建议使用单独的语句或特定于这些程序的特殊选项。我想了解绑定优先级。
这是我的脚本:
if [[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] && [[ "$1" == "Decrypt" ]] || [[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] && [[ "$1" == "Encrypt" ]]
then
key=aNXlye1tGbd0uP
else
if [ -z "$key" ]
then
key="$2"
fi
fi
Run Code Online (Sandbox Code Playgroud)
它应该寻找第二个参数,删除 potential .two,然后将其与 进行比较load,如果是load,则应设置key为aNXlye1tGbd0uP。但是,这不起作用。这是我运行时的样子。
pskey Decrypt load (some string)
Run Code Online (Sandbox Code Playgroud)
这是来自的输出bash -x:
++ echo load
++ sed s/.two//g
+ [[ load == \l\o\a\d ]]
+ …Run Code Online (Sandbox Code Playgroud)