同じワークフローでBashでksh / zshや他のシェルを使用できますか?

同じワークフローでBashでksh / zshや他のシェルを使用できますか?

同じワークフロー(シェルセッション)でBashでksh / zshや他のシェルを使用できますか?

私はBashに精通していますが、kshまたはzshで利用可能ないくつかの動作が必要な場合があります。少なくとも競合なしで単一のシェルセッションでBashを使用できますか?

ここで解決すべき問題はなく、シェルと常識の関係をよりよく理解するためのアーキテクチャ問題にすぎません。

答え1

これには2つの問題がある可能性があります。

  1. 複数のシェルバリアントを含むスクリプトを作成して一緒に使用できますか?
  2. あるシェルバリアント用のスクリプトを作成し、別のシェルインタプリタで実行できますか?

最初の質問の場合:

はい、スクリプトが作成されたシェルインタプリタによってスクリプトが実行される限り可能です。どのシェルを使用するかは問題ではありません。インタラクティブこれは、スクリプトに正しい#!行があるか、明示的なインタプリタ(たとえば)を使用して実行される限りksh myscript機能します。

スクリプトは、ユーザー(または他の人)が作成したコマンドのように機能します。作成された言語に関係なく、他のスクリプトがそれを呼び出すことができます(実行可能で正しい#!-line があると仮定)。

2番目の場合:

構文と構文の観点から最も低い共通分母のみを使用してスクリプトを作成する場合(この3つのシェルの場合はPOSIX sh)、次のことができます。かなり私は彼らがこれらのすべてのシェルで実行されると確信しています(ただし、1つのシェルがPOSIX仕様に従わない極端なケースがあると仮定します)。しかし、を使ってスクリプトを実行することもできますが、なぜそれを持っているのか、それをzsh実行kshするのですか?sh/bin/sh

ksh93bashまた、可能ですzshが、そのシェルに慣れていません)共通の拡張において大幅な多様性を提供します。shしかし、場合によっては構文と意味が一貫しているように見えても他の違いにより、奇妙な問題が発生します。

一般的にいいえ。あるシェルが別のシェル用に作成されたスクリプトを正常に正しく実行できるとは考えられません。たとえば、bashスクリプトは次のようになります。使用スクリプトkshは他のコマンドと同じですが、スクリプトにしてはsourceいけませんksh

理想的には、異なるシェルがまったく異なるスクリプト言語であると仮定し、前述のように特定のシェルに対して作成する必要があります。いいえPythonコードを書いて、PerlまたはRubyで実行することを期待しています(いくつかの考案がない限り)。多言語スクリプト)。

答え2

簡単な確認の例を挙げましょう。

$ echo $SHELL
/bin/bash
$ for othershell in ash dash posh rksh bash ksh zsh; 
  do 
    $othershell -c "echo Hello from the $othershell"; 
  done
Hello from the ash
Hello from the dash
Hello from the posh
Hello from the rksh
Hello from the bash
Hello from the ksh
Hello from the zsh

関連情報