2017-08-07 2 views
-2

kshで設定した環境変数とexpectコマンドを同じスクリプトで使用しようとしています。しかし、私は両方のソースをしようとすると、それは動作しません。 kshをソースし、同じスクリプトで期待する方法はありますか?kshとexpectを同じスクリプトでソースできますか?

+0

あなたの質問の説明に役立つ[最小限で完全で検証可能なサンプルの作成方法](https://stackoverflow.com/help/mcve)を見てください。 – markp

答えて

0

Kornシェルではたとえば、あなたが他のスクリプトでドットシェル:

. ${other_script} 

これは、親スクリプトと同じプロセスで実行されます。他のスクリプトは、親スクリプトで定義されている変数をすべて見ることができます。サブシェル(外部コマンドを実行する)を使用する場合は、最初に変数をエクスポートする必要があります。

expectスクリプトで環境変数を参照する場合(サブシェルで期待されるkshスクリプトによってエクスポートされたもの)、expectスクリプトはグローバル配列envを参照する必要があります。あなたのkshスクリプトをエクスポートしMYPATH変数は、次に期待するサブシェル場合ことを意味たとえば、ここで-docのターミネータ(<<'END_EXPECT')の前後に引用符を追加

#!/usr/bin/ksh 

. /path/to/ksh_stuff.sh 
export FOO=bar 

# other ksh stuff 

expect <<'END_EXPECT' 
    source /path/to/expect_stuff.exp 
    send_user "FOO is $env(FOO)\n" 
    # other expect stuff 
END_EXPECT 

好きなものを$env(MYPATH)

+0

しかし、他のスクリプトのソースはKSHで実行されます。まあ、それはないですか?これは、2番目のスクリプトがkshを入手するときにEXPECTコマンドを認識しないので目的を破る –

+0

問題は私のexpectスクリプトでKSHに設定されている環境変数を使用する必要があるということです。これらをパラメータとして渡すことはできますか? –

+0

参照への応答が更新されました$ env配列 – mao

0

を参照する可能性が期待全体here- docは単一引用符で囲まれているので、kshはその上でパラメータの置換を試みません。これは、expectスクリプトの変数をkshから隔離する有効な方法です。

関連する問題