在zsh中使用comm和sort
我正在从bash迁移到zsh。我遇到的困难之一是这个脚本,有人能帮我写这个脚本吗? 我想使用comm命令执行一个TARGET-PRUNE_文件操作:从files.proj.bak中删除files.proj.bak和prunefile.conf中的行在zsh中使用comm和sort,zsh,Zsh,我正在从bash迁移到zsh。我遇到的困难之一是这个脚本,有人能帮我写这个脚本吗? 我想使用comm命令执行一个TARGET-PRUNE_文件操作:从files.proj.bak中删除files.proj.bak和prunefile.conf中的行 TARGET=files.proj.bak PRUNE_FILE=prunefile.conf comm -23 <(sort files.proj.bak) <(sort prunefile.conf) TARGET=files.p
TARGET=files.proj.bak
PRUNE_FILE=prunefile.conf
comm -23 <(sort files.proj.bak) <(sort prunefile.conf)
TARGET=files.proj.bak
PRUNE_FILE=prunefile.conf
comm-23如果没有shebang,脚本的执行方式取决于谁在执行它
bash
将尝试使用bash
本身执行它,它支持进程替换
另一方面,zsh
尝试使用/bin/sh
执行脚本,该脚本(即使它确实是以sh
的名称运行的bash
)不支持进程替换
解决方案是使用显式解释器运行脚本,该解释器支持脚本中出现的任何语法,例如
$ zsh cscope.sh
或
或者添加指定适当解释器的shebang,例如#/bin/bash
或#/bin/zsh
这是zsh中的有效语法。但是在Zsh中执行脚本并不意味着该脚本由Zsh解释。你需要给我们看一看雪邦head-1/Users/admin/Dropbox/loadrc.home/bashrc/cscope.sh
。等等,这就是整个脚本,没有一个shebang(看到comm
是第4行了吗?然后由POSIX sh执行。添加#/usr/bin/env zsh
到脚本顶部。顺便提一下,这里有一个相关问题,其中包含一些技术细节,说明在执行不带shebang的脚本时会发生什么:。无论如何,这是非常糟糕的做法,所以不要这样做。@4ae1e1:我同意该脚本显然不是由Zsh运行的,因为如果是,错误消息将包括Zsh:。但是如果它是由sh运行的,则错误消息将显示sh:。。。至少在我的书里是这样的。@huangyingw:你是如何运行脚本的?您在编写脚本时是否也收到了错误?谢谢,是的,我需要输入#/bin/zsh在脚本文件的头部。
$ zsh cscope.sh
$ bash cscope.sh