「MachineIndependent」の版間の差分

提供: Eospedia
移動: 案内検索
(ページの作成:「== MachineIndependent ==  �Eosでは、$EOS_HOME/bin に対してPATHが張られていて、SmallToolsがそのディレクトリに配置されています。...」)
 
(‎�シェルスクリプトの実体)
行24: 行24:
 
 Tcl/Tkはwish、Rubyはruby、Bashはshell、Perlはperlのディレクトリの下に、そのコマンドの名前のディレクトリがある場合には、そのディレクトリ以下にあるプログラム群を、それぞれの言語仕様に従って、読み込んできます。
 
 Tcl/Tkはwish、Rubyはruby、Bashはshell、Perlはperlのディレクトリの下に、そのコマンドの名前のディレクトリがある場合には、そのディレクトリ以下にあるプログラム群を、それぞれの言語仕様に従って、読み込んできます。
  
=== �シェルスクリプトの実体 ===
+
=== シェルスクリプトの実体 ===
  
 
2016年9月1日版のMachineIndependentファイルは下記のようになっています。
 
2016年9月1日版のMachineIndependentファイルは下記のようになっています。

2016年9月7日 (水) 03:41時点における版

MachineIndependent

 �Eosでは、$EOS_HOME/bin に対してPATHが張られていて、SmallToolsがそのディレクトリに配置されています。

 しかし、実際には、$EOS_HOME/sbin/MachineIndependent� に対してリンクが張られていて、全て同じシェルスクリプトが動く様になっています。その目的は��、主として、①ホスト毎のアーキテクチャの違いを吸収すること、②GUI等をもつスクリプトタイプのコマンドに対応すること、の2点です。そのため、現状、若干起動に時間がかかるようになっています。今後、少し変更していく必要があると考えています。

BASENAMEの設定

BASENAME=`basename $0` 

をつかってこのシェルがどのプログラムとして起動したかを特定しています。これが同じシェルスクリプトを使いながら、異なるプログラムが動いている理由です。

OSTYPEの設定 (ホスト毎のアーキテクチャの違いの吸収)

 起動時に、Eos_envの中で、EOS_HOST�, EOS_HOSTDIRが設定されます。これは、機器毎のアーキテクチャの違いを示したものです。このシェルの中では、�このEOS_HOSTを使って、OSTYPEを指定し、対応した実行形式を選択するようにしています。  これは、ハードディスクが貴重で、かつ、異なるアーキテクチャのマシンが同じファイルサーバを共有していた時代の名残でもありますし、かつ、異なるバイナリを配付し、同じ場所にインストールしたとしても動作を保証することが目的で、このようなファイル構成になっています。

 従来は、bin/�$(OSTYPE)の直下に、それぞれのアーキテクチャ毎の実行形式を配置しておりました。現在は、アーキテクチャ毎に切り分けるために、hostdepend/$(OSTYPE)/bin/$(OSTYPE)に置かれており、hostdepend/$(OSTYPE)�/bin/$(OSTYPE)が、bin/$(OSTYPE)としてリンクが張られています。

使用するスクリプトファイルの設定 (GUI等をもつスクリプトタイプのコマンドへの対応) 

 �配付されたバイナリが、スクリプト言語のインタープリタの拡張(Tcl/TkやRuby等)である場合、スクリプトファイルを自動的に��読み込むための仕組みを持っています。 bin/の直下にそれぞれのスクリプト言語に応じたスクリプトをもっている場合に、そちらを読み込んで起動することになります。

 Tcl/Tkはwish、Rubyはruby、Bashはshell、Perlはperlのディレクトリの下に、そのコマンドの名前のディレクトリがある場合には、そのディレクトリ以下にあるプログラム群を、それぞれの言語仕様に従って、読み込んできます。

シェルスクリプトの実体

2016年9月1日版のMachineIndependentファイルは下記のようになっています。

#!/bin/sh

BASENAME=`basename $0`

case ${EOS_HOST} in
	"hpux")
		OSTYPE=HP
		;;
	"alpha")
		OSTYPE=ALPHA
		;;
	"alphaLinux")
		OSTYPE=ALPHALINUX
		;;
	"alphaLinux5")
		OSTYPE=ALPHALINUX5
		;;
	"alphaOSF1")
		OSTYPE=ALPHAOSF1
		;;
	"i386Mac")
		OSTYPE=I386MAC
		;;
	"x86Mac64")
		OSTYPE=X86MAC64
		;;
	"i386Linux")
		OSTYPE=I386LINUX
		;;
	"i686Linux")
		OSTYPE=I686LINUX
		;;
	"x86Linux64")
		OSTYPE=X86LINUX64
		;;
	"cellLinux64")
		OSTYPE=CELLLINUX64
		;;
	"sgi")
		OSTYPE=SGI
		;;
	"sparc")
		OSTYPE=SPARC
		;;
	"apollo")
		OSTYPE=APOLLO
		;;
	*)
		echo "The environment variable, EOS_HOST, has not set yet." 
		echo "Or EOS_HOST=\"${EOS_HOST}\" is not supported yet."
		;;
esac

if [ ! -z $USE_ICC ] ; then
	OSTYPE=${OSTYPE}ICC
fi

#echo $OSTYPE
if [ -x ${EOS_HOME}/bin/shell/${BASENAME}/${BASENAME}.sh ]
then
	# Shell Script
	${EOS_HOME}/bin/shell/${BASENAME}/${BASENAME}.sh "$@"
elif [ -x ${EOS_HOME}/bin/perl/${BASENAME}/${BASENAME}.pl ]
then
	# Perl 
	perl ${EOS_HOME}/bin/perl/${BASENAME}/${BASENAME}.pl "$@"
	#
elif [ -x ${EOS_HOME}/bin/ruby/${BASENAME}/${BASENAME}.rb ]
then
	# Ruby
	ruby -I${EOS_HOME}/lib/${OSTYPE} -I${EOS_HOME}/lib -I${EOS_HOME}/bin/ruby/${BASENAME} ${EOS_HOME}/bin/ruby/${BASENAME}/${BASENAME}.rb "$@"
	#
elif [ -x ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish ] 
then
	# Wish
	if [ -x ${EOS_HOME}/bin/${OSTYPE}/${BASENAME} ]
	then
		${EOS_HOME}/bin/${OSTYPE}/${BASENAME} "$@"	< ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish
	elif [ -x ${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} ]
	then
		${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} "$@" < ${EOS_HOME}/bin/wish/${BASENAME}/${BASENAME}.wish
	else
		echo "Not installed: ${OSTYPE}-vesion ${BASENAME}"	
	fi
else
	# No Wish 
	if [ -x ${EOS_HOME}/bin/${OSTYPE}/${BASENAME} ]
	then
		${EOS_HOME}/bin/${OSTYPE}/${BASENAME} "$@"
	elif [ -x ${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} ]
	then
		${EOS_ANOTHER_HOME}/bin/${OSTYPE}/${BASENAME} "$@"
	else
		echo "Not installed: ${OSTYPE}-version ${BASENAME}"	
	fi
fi

exit 0