0

ファイル(.csh)があったとしましょう

ファイルの内容

Script_1
{
 code of script1
}

Script_2
{
    code of script2
 }
.
.
.

Script_n
{

 code of script_n

}

今、私たちが

 ./file.csh -script1 <other arguments>

スクリプト1のコードのみを実行する必要があります。

./file.csh  -script2 <other arguments>

スクリプト2のコードのみを実行する必要があります

誰かがそれを達成する方法のアイデアを教えることができますか?

4

2 に答える 2

1

これが私の解決策です、それが役立つことを願っています。

all_scriptファイルを使用してすべてのコンテンツを保存します。私のサンプルファイルの内容は次のとおりです。

Script_1
{
 echo executing script1
 echo 1st arg = $1
 echo 2nd arg = $2
 echo rest arg = $*
}

Script_2
{
 echo script2  
 echo 1st arg = $1
 echo 2nd arg = $2
 echo rest arg = $*

}

Script_3
{
echo script3
 echo 1st arg = $1
 echo 2nd arg = $2
 echo rest arg = $*
}

これを実行するための私のスクリプト:

#! /bin/csh -f


set script_name = `echo $argv[1] | sed 's/-s/S/g' | sed 's/t/t_/g'`
set script_arg =  "$argv[2-$#argv]"  

#grep the relevent script
grep -A1000 $script_name all_script | grep -B1000 -m1 "}" | sed 's/Script_[0-9]//g' | sed 's/{//g' | sed 's/}//g' > myscript 
csh ./myscript $script_arg

echo "DONE :)"

スクリプトの最大長に基づいて、数値1000を変更します。また、ファイル内のスクリプト名としてScript_1を使用していることに注意してください。引数-script1を使用してアクセスしようとしている間。私のスクリプトはこれを処理しますが、フォーマットのいずれかを使用する方が適切であり、大文字と小文字も同じである必要があります...そうでない場合は、不必要な複雑さを招きます。

于 2012-04-15T13:42:50.610 に答える
1

渡された引数の順序で整数>0の$n場合、コマンドラインパラメータを取得できます。n

#!/bin/csh
if ($#argv < 1) then
    echo "Usage: $0 (-script1|-script2) <args>"
    exit 0
endif

if ($1 == '-script1') then
# run Script_1
else
# run Script_2
endif;

最初の引数を除くすべての引数をまとめたい場合は、次を使用できますshift

#!/bin/csh

// without argument by default operates on $argv which is all the arguments 
// passed via command line
shift 

echo $argv // now contains all arguments but the first
于 2012-04-13T10:40:07.143 に答える