シェルスクリプトファイル.csh
からスクリプトファイルを呼び出すことはできますか?.sh
たとえば、私はa.sh
、b.csh
。 a.shファイルからb.cshを呼び出すことはできますか?それでは、どうすればいいですか?
私はこれを書こうとしました。これはashファイルです。
variable= source /path/to/b.csh
- 役に立たないsh ./path/to/b.csh
- 役に立たない
b.csh
ファイルのshebang行が次のように言及されていることを追加したいと思います。#!/bin/csh -fx
答え1
あなたはできます実装する b.csh
from、たとえば、またはa.sh
などのプログラムを実行できます。grep
cat
b.csh
シェルが実行されている環境に変数を追加する実行は期待できませんa.sh
。 b.cshは子プロセスで実行され、子プロセスは親プロセスの環境を変更できません(これはデフォルトのセキュリティです)。
データ通信が必要な場合はb.csh
b.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
をというプログラムで直接処理しますsh
。sh
最初の行はコメントで始まる行を解釈するので無視されます#
。
sh ./path/to/b.csh
したがって、書いてはいけませんが、./path/to/b.csh
shebangが尊重されたい場合。
これにより、スクリプトを実行するための新しいプロセスが作成されます。./path/to/b.csh
各行をから直接書いたように実行するには、a.sh
そうする必要がありますsource ./path/to/b.csh
(または. ./path/to/b.csh
移植性のために)。ただし、Shebangも無視され、各行はコマンドではなくコマンドのsh
ように評価されます。csh