Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在zsh中使用comm和sort_Zsh - Fatal编程技术网

在zsh中使用comm和sort

在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

我正在从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.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