相关疑难解决方法(0)

shell 的控制和重定向操作符是什么?

我经常在网上看到用不同符号连接各种命令的教程。例如:

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 io-redirection control-flow

353
推荐指数
3
解决办法
17万
查看次数

管道和重定向绑定优先级与析取符、连接符等?

我知道运算符 ';'、'&'、'&&' 或 '||' 的相对绑定优先级

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 方式)。还有其他情况,所以不要开始给我建议使用单独的语句或特定于这些程序的特殊选项。我想了解绑定优先级。

bash pipe io-redirection

12
推荐指数
1
解决办法
3816
查看次数

为什么这个相当简单的“如果”不起作用?

这是我的脚本:

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,则应设置keyaNXlye1tGbd0uP。但是,这不起作用。这是我运行时的样子。

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)

bash

0
推荐指数
1
解决办法
716
查看次数

标签 统计

bash ×2

io-redirection ×2

control-flow ×1

pipe ×1

shell ×1