.shファイルから.cshファイルを呼び出す

.shファイルから.cshファイルを呼び出す

シェルスクリプトファイル.cshからスクリプトファイルを呼び出すことはできますか?.sh

たとえば、私はa.shb.csh。 a.shファイルからb.cshを呼び出すことはできますか?それでは、どうすればいいですか?

私はこれを書こうとしました。これはashファイルです。

  1. variable= source /path/to/b.csh- 役に立たない
  2. sh ./path/to/b.csh- 役に立たない

b.cshファイルのshebang行が次のように言及されていることを追加したいと思います。#!/bin/csh -fx

答え1

あなたはできます実装する b.cshfrom、たとえば、またはa.shなどのプログラムを実行できます。grepcat

b.cshシェルが実行されている環境に変数を追加する実行は期待できませんa.sh。 b.cshは子プロセスで実行され、子プロセスは親プロセスの環境を変更できません(これはデフォルトのセキュリティです)。

データ通信が必要な場合はb.cshb.cshが必要です。印刷このデータであるa.shは、コマンドオーバーライドによってそれをキャプチャできます。 - ノイズを減らすために、csh shebang行からそのオプションを削除するdata=$(b.csh)必要があるかもしれません。-x

答え2

書くなら

./script.sh

シェルにスクリプトを実行する必要があることを伝えます./script.sh。ただし、シェルはどのように実行するのかわかりません./script.sh。台本ですかbash?おそらくcsh?あるいは、バイナリELFファイルにすることもできます。例えばls?それともpythonスクリプトです。これを理解するために、オペレーティングシステムはファイルの最初のバイトを調べます。 shebangが見つかった場合は、shebangで指定されたプログラムでファイルを処理する必要があることを意味します。

したがって、スクリプトの最初の行は次のようになります。

#!/usr/bin/bash
...

bashプログラムが指定したディレクトリでファイルを処理し、/usr/bin効率的に実行しますbash ./script.sh

ただし、作成すると、そのファイルsh ./path/to/b.cshをというプログラムで直接処理しますshsh最初の行はコメントで始まる行を解釈するので無視されます#

sh ./path/to/b.cshしたがって、書いてはいけませんが、./path/to/b.cshshebangが尊重されたい場合。

これにより、スクリプトを実行するための新しいプロセスが作成されます。./path/to/b.csh各行をから直接書いたように実行するには、a.shそうする必要がありますsource ./path/to/b.csh(または. ./path/to/b.csh移植性のために)。ただし、Shebangも無視され、各行はコマンドではなくコマンドのshように評価されます。csh

関連情報