1

このbashスクリプト(テスト)があるとしましょう:

#!/usr/bin/env bash
source ~/.zshrc

私の .zshrc には、次のものがあります。

autoload -U compinit
compinit

ターミナル ウィンドウ (zsh) から 'bash test' を実行しようとすると、autoload コマンドと compinit コマンドが見つからないというエラーが表示されます。コマンドラインから source ~/.zshrc を実行すると、正常に動作します。

このブログと同様に、開発環境をセットアップしようとしていますが、スクリプトが .zshrc ファイルを読み込もうとすると失敗します。

任意の洞察をいただければ幸いです。

4

2 に答える 2

8

bashスクリプトでは、スクリプトを実行するために使用していzshます。pythonインタプリタに解析を依頼することもできますperl

シバン行でに変更bashするか、コマンドを使用してスクリプトを記述します。zshbash

于 2012-01-15T17:14:36.337 に答える
2

python 対 perl ほど悪くはありません。bash と zsh はどちらも Bourne シェル (その動作は POSIX によって標準化されています) から派生しているため、動作するように設計されたスクリプト/bin/shは、bash または zsh のいずれでも動作する可能性があります。

通常、名前が示すように、 は zsh で使用するように設計されており、通常はや~/.zshrcなどの zsh 固有のコマンドが含まれます。autoloadcompinit

これらのコマンドを条件付きにすることができます。次に例を示します。

if [ "$ZSH_VERSION" ] ; then
    autoload -U compinit
    compinit
fi

しかしもちろん、それは、bash でそれらをエミュレートする方法を見つけ出さない限り、これらのコマンドの機能を利用できないことを意味します。(私はどちらのコマンドにも詳しくないので、その点についてはお答えできません。)

set -u(実行した場合、またはset -o nounsetbash シェルで実行した場合、これは失敗することに注意してください。)

~/.bashrcしかし、zsh と bash の両方を使用する場合は、個別のファイルと~/.zshrcファイルを用意し、それぞれが設計されたシェルでのみ使用する方がおそらくはるかに理にかなっています。重複を避けたい場合は、それぞれが共通コマンドを含む 3 番目のファイルを入手できます。

(そして、コメントに基づいて、そもそも間違ったことをしている可能性があります。)

于 2012-01-15T22:21:51.410 に答える