Неизвестная ошибка в оболочке

Может кто-нибудь объяснить мне, что означает эта ошибка:

 > ./rank lines.in
'nknown option: `-
Usage: tcsh [ -bcdefilmnqstvVxX ] [ argument ... ].

это мой рейтинг сценария:

#! /bin/tcsh -f
set line = `cat ${1}`
echo $line

Я думаю, что проблема у меня с первым рядом #! /bin/tcsh -fЯ работаю на Windows! но после того, как я написал скрипт в редакторе Windows, я конвертировал его с помощью dos2unix rank, в чем может быть проблема, заранее спасибо за любую помощь

2 ответа

Решение

Я не думаю, что ваш dos2unix работал. Похоже, у вас все еще есть \r в конце строки хэш-бэнг, которая ему не нравится. Похоже, он видит /bin/tcsh -f\rинтерпретируя это как /bin/tcsh -f -\rи затем пытается распечатать сообщение об ошибке:

Unknown option: `-\r'

\r заставляет заключительную кавычку появляться в начале строки. Если вы хотите увидеть, что именно в вашем файле, попробуйте cat -A ./rank распечатать все скрытые символы. Вы, вероятно, увидите

#! /bin/tcsh -f^M$

Я установил tcsh на свой Linux-компьютер и запустил этот скрипт, и он сработал, так что я думаю, что разрывы строк неправильные

Кажется, ошибка просто означает, что когда вызывается оболочка tcsh, она получает недопустимые параметры. Я думаю, что он получает весь скрипт в виде списка параметров. Я попытался изменить -f на -g (не распознается как параметр tcsh), и я получил:

Unknown option: `-g'
Usage: tcsh [ -bcdefilmnqstvVxX ] [ argument ... ].

Заметьте, как он все еще говорит мне имя неверного параметра?

Либо это, либо ваш tcsh начинается неправильно. Можно указать параметры по умолчанию при запуске оболочки tcsh. Вы пытались начать один?

Но на самом деле единственной причиной изучения tcsh может быть необходимость поддерживать некоторые старые сценарии tcsh. И даже тогда я бы начал с преобразования их в какой-нибудь другой язык сценариев, если это вообще возможно. Если вы хотите изучить сценарии оболочки, попробуйте bash или bourne shell. Есть много причин, по которым tcsh просто разозлит вас.

Другие вопросы по тегам