2012-03-11 18 views
1

実行可能ファイルとして実行できるOctaveスクリプトを作成しようとしています。実行可能なオクターブスクリプト: 'usr/local/bin/octave:無効なオプション - '

オクターブバージョン3.6.0を使用しています。私は、フォームhereダウンロード次のスクリプトを実行しています:

#!/usr/local/bin/octave -qf 

# An example Octave script 

len = input("What size array do you wish to use for the evaluation: "); 

clear a; 
tic(); 
for i=1:len 
    a(i) = i; 
endfor 
time1 = toc(); 

a = [1]; 
tic(); 
for i=2:len 
    a = [a i]; 
endfor 
time2 = toc(); 

a=zeros(len, 1); 
tic(); 
for i=1:len 
    a(i) = i; 
endfor 
time3 = toc(); 

printf("The time taken for method 1 was %.4f seconds\n", time1); 
printf("The time taken for method 2 was %.4f seconds\n", time2); 
printf("The time taken for method 3 was %.4f seconds\n", time3); 

しかし、私は、コマンドライン上でスクリプトを実行すると、私は次のエラーを取得:

「USR/local/binに/オクターブ:無効なオプションを - - '

しかし、私は、コマンドラインで同じコマンドを入力するとき:

/usr/local/bin/octave -qf

私はオクターブのコマンドプロンプトを取得します。私は間違って何をしていますか?

+0

あなたは質問に 'を/ usr/local/binに/オクターブyour_script -qf'実行した結果を追加してもらえますか? –

答えて

3

私はあなたが何らかの種類のUnix/Linuxシステムにいると仮定します。 DOS形式の行末で "DOS"形式のファイルですか?これは、コマンドの解釈方法に問題を引き起こす可能性があります。

+0

他のすべてが失敗し、別のファイルでうまく動作するコマンドが 'faulty'ファイルに保存されていないと、私は問題があなたが示唆したように行末で行うことになると思っていました。(コピーして貼り付けたウェブからのデータ)。 geditを使ってチェックしてみたところ、問題のファイルにはWindowsの行末がありました:/これを修正し、問題は解決しました。私は最初の事例であなたに耳を傾けていたはずなので、50ポイントをあなたに授与します! –

+0

愚かな時間の緩い。 2つのシステム、2つの異なる行末線... Thx! – nightcod3r

0

あなたのシバンライン(btwにはスペースを入れてはならない)は/usr/local/bin/octaveですが、エラーは/usr/bin/octaveです。それは間違いですか?そのような場合は、コードやエラーをコピー&ペーストする必要があります。そうでない場合、localバージョンは、非対話型で実行すると誤ったオプションでバイナリを呼び出すスクリプトである可能性があります。特に、スクリプト(または何か)が長いオプション(--option)を使用しようとしているようで、バイナリはそれをサポートしていない(短いオプションとして解釈している)ようです。

+0

/usr/local/binにする必要があります。私はOctaveを1つしかインストールしていません。私はビンの場所を反映するために私のコードスニペット/エラーメッセージを修正しました。存在(または#!の空白がないことは赤ちゃんのAFAIKですが、スペースを削除しましたが、エラーは残ります)。 –

+0

@HomunculusReticulliそれでも、ファイルであるかどうかを確認してください。 – Kevin

+0

ファイルの種類を確認して(提案どおりに)確認しました。オクターブはオクターブ3.6.0へのシンボリックリンクで、これは同じフォルダ内の実行可能ファイルです。私はスクリプトファイルを更新しましたが、実行すると次のエラーが出ました: '' usr/local/bin/octave-3.6.0:無効なオプション - '' –

0

まず、投稿されたスクリプトは自分のシステムでうまく動作します。

nano test.shと入力してファイルにコピーし、最初の行を#!/usr/bin/octave -qfに変更します。

私はCtrl-OとCtrl-Xを押します。

次に、chmod + x test.shを使用してスクリプトを実行可能にします。

次に、./test.shまたはoctave -qf test.shを使用してスクリプトを実行すると、期待どおりに動作します。

注:私のシステムで Octaveは

$ which octave 
/usr/bin/octave 

$ file /usr/bin/octave 
/usr/bin/octave: symbolic link to `octave-3.6.1' 

$file /usr/bin/octave-3.6.1 
/usr/bin/octave-3.6.1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically  linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x061b0a703928fc22af5ca93ee78346a7f5a0e481, stripped 

そして、私のシステム/usr/bin/usr/local/binにある$PATH

に、私はあなたが言及してエラーを発生させることができる唯一の方法は、最初の行を変更することですされていますスクリプトを #!/usr/bin/octave - -または#!/usr/bin/octave -q -fにします。

これはこれはあなたのマシン上のスクリプトでシェバングラインが間違っているか、正しく解釈されていることを意味し

$ ./test.sh 
/usr/bin/octave: invalid option -- ' ' 

を与えます。

スクリプトの最初の行が正しいことを確認します。

さらに、#!/usr/local/bin/octave -qまたは#!/usr/local/bin/octave -fに変更するとどうなるかを特定します。シェバングラインの解析についての詳細は

は、以下を参照してください。