Исполняемый октавный скрипт: «usr / local / bin / octave: неверный параметр -» - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь написать скрипт Octave, который я могу запустить как исполняемый файл.

Я использую октаву версии 3.6.0.Я запускаю следующий загруженный скрипт формы здесь :

#!/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 / octave: неверный параметр - '

Однако, когда я набираю ту же команду в командной строке:

/ usr / local / bin / octave -qf

Я получаю командную строку октавы.Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 12 марта 2012

Полагаю, вы работаете в какой-то системе Unix / Linux. Является ли файл в формате "DOS", с окончаниями строк в стиле DOS? Это может вызвать проблемы с интерпретацией команды.

0 голосов
/ 17 марта 2012

Во-первых, опубликованный скрипт отлично работает в моей системе.

Я набираю nano test.sh, копирую его в файл, меняю первую строку на #!/usr/bin/octave -qf.

Я нажимаю Ctrl-O и Ctrl-X.

Затем я делаю сценарий исполняемым с помощью chmod + x test.sh.

Затем я запускаю сценарий с помощью ./test.sh или octave -qf test.sh, и он работает как положено.

Примечания: Октава в моей системе

$ 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.

Для получения дополнительной информации о разборе строки shebang см .:

0 голосов
/ 13 марта 2012

Ваша строка shebang (которая, кстати, имеет пробел, которого не должно быть) вызывает /usr/local/bin/octave, но ошибка исходит от /usr/bin/octave. Это ошибка? Если это так, вам нужно скопировать и вставить код и ошибки для подобных вещей. В противном случае версия local может быть сценарием, который вызывает двоичный файл с неправильной опцией при неинтерактивном запуске. В частности, похоже, что скрипт (или что-то, по крайней мере) пытается использовать длинный параметр (--option), а двоичный файл не поддерживает его (поэтому он интерпретирует его как короткий вариант).

...