Igo*_*sic 3 mac zsh shell osx-mavericks macos
我在 MacOS 中使用 ZSH 作为默认 shell,一切正常。ZSH 作为brew 包安装,我在我的帐户中设置了默认shell,新shell 列在/etc/shells...一切都已设置,就像我所说的。
我有一些 shell 脚本,其中使用 zsh 中的一些命令,例如print. 当我从命令行执行脚本时,该print命令无法识别并且脚本失败。
该脚本没有shebang行。当我将 shebang 行设置为 zsh 时,一切正常;该print命令正在运行。
由于我只使用 ZSH,是否可以设置运行脚本的默认 shell ,这样我就不必将 shebang 行放入我的 .zsh 脚本中?
或者是否可以将.zsh扩展关联到 ZSH shell 执行?
如果您运行不带 shebang 行的可执行脚本,则使用Z shell (请参阅命令执行部分或查看此答案以获取完整列表)。这似乎是硬编码的。所以,如果你不想使用unix-way(添加shebang行),你可以在Z shell中使用所谓的后缀别名,用某个程序执行所有具有特定扩展名的文件。在你的情况下/bin/shman zshmisc
alias -s zsh=zsh
Run Code Online (Sandbox Code Playgroud)
应该可以解决问题。一般形式是(因为上面的例子不太清楚):
alias -s extension=program
Run Code Online (Sandbox Code Playgroud)
手册页解释了它是如何工作的:
如果存在 -s 标志,则定义后缀别名:如果命令行上的命令字采用 形式
text.name,其中 text 是任何非空字符串,则它将被替换为 textvalue text.name。请注意,名称被视为文字字符串,而不是模式。在这种情况下,值中的尾随空格并不特殊。例如,
Run Code Online (Sandbox Code Playgroud)alias -s ps=gv将导致命令
*.ps扩展为gv *.ps. 由于别名扩展先于通配符进行,因此*.ps随后将被扩展。后缀别名构成与其他别名不同的名称空间(因此在上面的示例中仍然可以为命令 ps 创建别名),并且这两个集合永远不会一起列出。
如果您想使用位于您的某个位置的脚本$PATH,请使用
alias -s zsh="zsh -o PATH_SCRIPT"
Run Code Online (Sandbox Code Playgroud)
这启用了该选项PATH_SCRIPT:
如果设置了选项 PATH_SCRIPT,并且文件名不包含目录路径(即名称中没有“/”),则首先在当前目录中搜索脚本,然后在变量 PATH 给出的命令路径中搜索脚本。
.请注意,即使不在您的PATH!目录中,也会在当前目录中搜索脚本。