私はRSHシーケンスを開始するシステムコマンドをトリガするC ++アプリケーションを扱っています。たとえば、次のようになります。
rsh MACHINE \"setenv DISPLAY machine:0;setenv TESTVALUE1 'test';setenv scenTime 0;setenv simName 'name';/devel/test/run.sh\"
問題は、このコードはcsh
私のシェルにのみ適用されるため、needbash
のようなコマンドが必要であることです。setenv variable value
export variable=value
私の質問は、rshにユーザープロファイルまたはログインファイルを読み込むのではなく、特定のシェルを使用させる方法はありますか?
ベストアンサー1
可能であれば、アプリケーションにcsh構文の代わりにsh構文を使用するようにしてください。 Cshは今世紀にはほとんど使用されておらず、通常はデフォルトではインストールされません。 Shが標準です。実際には、このような単純なコマンドの場合、シェルを気にする必要さえありません。プログラムを呼び出すだけですenv
。
rsh MACHINE "env DISPLAY=machine:0 TESTVALUE1='test' scenTime=0 simName='name' /devel/test/run.sh"
アプリケーションを変更することはできませんが、シェルがbashの場合はbash機能を使用できます。 bashは非対話型ログインシェルで、親プロセスがrshd
or(対話型ログインによってロードされたファイルでもある)の場合にsshd
実行されます。~/.bashrc
shell)非ログインシェル)。これを模擬csh.bashrc
を定義する関数に入れることができますsetenv
:
if [[ $- != *i* ]]; then
# Non-interactive shell
setenv () {
export "$1=$2"
}
return
fi