我知道运算符 ';'、'&'、'&&' 或 '||' 的相对绑定优先级
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 中,如果您在有多个可能的补全时点击 Tab,您会得到一个匹配列表,如果您反复按 Tab,该列表会不断重印。在 tcsh 中,将自动完成设置为增强也可以实现这一点。
在 zsh 中,您确实获得了匹配项列表,但是在第 2、3 个选项卡上按下它开始在匹配项中循环。有没有办法让 zsh 在没有循环的情况下做相当于 bash 的 show-all-if-ambiguous?
我不是在寻找聪明但没用的“如果它在第一次之后显示,为什么你要多次按下 Tab 键?”。如果我能够调整我的习惯,我现在就已经这样做了。
在 Linux 中,我可以df
用来显示哪些 Windows 驱动器(例如/cygdrive/c
)对应于虚拟文件/dev/disk/sdd1
。
/dev/sdf1 932G 932G 0 100% /media/sarnobat/c
/dev/sde1 299G 260G 40G 87% /media/sarnobat/d
/dev/sdd1 299G 166G 133G 56% /media/sarnobat/e
Run Code Online (Sandbox Code Playgroud)
但是 Cygwin 的df
输出没有显示:
C: 312568640 210201636 102367004 68% /cygdrive/c
D: 244187968 229638796 14549172 95% /cygdrive/d
E: 312568640 281085516 31483124 90% /cygdrive/e
Run Code Online (Sandbox Code Playgroud)
有没有办法得到它?我试着/proc/*
找找,但我在任何地方都找不到。我在想,也许这个设备寻址方案根本不适用于 Windows,但如果我查看/dev/
文件夹,就会有一个列表:
$ ls -l /dev/ | grep sd
brw-rw-rw- 1 admin None 8, 0 Jul 17 2017 sda
brw-rw-rw- 1 admin None 8, …
Run Code Online (Sandbox Code Playgroud) 我想创建一个回显服务器而不在字符串中指定任何命令。我希望所有命令都通过管道连接。
这似乎不可能,因为在请求可以传递给响应生成逻辑之前返回响应。似乎我可以使用 ncat 但我也宁愿避免这种情况。
我认为使用 fifo 队列可能是可能的,但我无法使其正常工作。
“我正在尝试做什么”部分
以我有限的语言能力,试图证明这些限制是具有挑战性的。但我的最终目标是使用 xinetd(但没有守护进程)的便利来维护我所有应用程序逻辑的主脚本。这样的主脚本可能有几十行,如下所示:
nc -l 8080 | get_person_name.sh | create_insert_statement.sh | sqlplus
nc -l 8081 | get_person_id.sh | create_select_statement.sh | sqlplus
Run Code Online (Sandbox Code Playgroud)
第二个将不起作用,因为它无法将输出返回给客户端。因此,我将问题减少到使用 netcat 实现回声服务器。我不想使用字符串,因为所有这些命令都是动态的,我只是不想处理额外的间接级别(首先,我的文本编辑器将没有那么有用的语法突出显示)。不过,我愿意接受此处的文档解决方案。
autocomplete ×1
bash ×1
block-device ×1
cygwin ×1
filesystems ×1
netcat ×1
partition ×1
pipe ×1
posix ×1
zsh ×1