質問: 別のシェルで関数を実行する 私は通常zshです。 bashで関数を実行して、元のシェルに戻したい。これは手動で行うことができますが、自動化したいと思います。どうやってやるの?たとえば、私はzshを使用しています。 _bigscript.sh_ファイルのfunction()であるfuncを実行したいと思います。 _bigscript.sh_ファイルの_.zshrc_ファイルを調達しています。_#!/bin/bash_ファイルにshebang _bigscript.sh_を追加しようとしましたが、シェルは変更されません。 functionをスタンドアロンの_function.sh_ファイルに入れる別のアプローチを試し、それにshebangを追加しました。出来た。ただし、ファイルを小さな_.sh_ファイルに分割したくありません。したがって、単一の関数のシェルを変更するための提案はありますか?
回答: 通常、bash関数を実行する場合は、bashインタープリターを使用する必要があります。一部の関数は構文が似ているためzshで機能する場合がありますが、つまずく可能性のある違いがあります。これを試して。bash -c 'source bigscript.sh && func' これを行うことにはいくつかの落とし穴があります。関数が変数またはエイリアスを設定している場合、それらはzshに表示されません。また、bigscript.shに関数内にないコードが含まれている場合は、ソーシングが完了すると実行されますのでご注意ください。最後に必要なのは、bigscript.shが誤って一部のファイルを削除したり、その他の予期しない変更を加えたりすることです。 bigscript.shが単なる関数のコレクションである場合は、問題ないはずです。 zshセッションは、関数の戻り/終了コードと、関数がstdoutに書き込む出力を収集できるようになります。