Ошибка при выполнении приглашения на чтение в csh и преобразовании в многострочный псевдоним
Привет всем, у меня есть эта проблема, где у меня есть пример программы на csh (я знаю, что это не лучший язык для использования в сценариях, но у меня нет выбора здесь), как это:
#!/bin/csh
echo 'please enter values'
read a
read -e b
echo "My values are $a and $b"
Как вы могли заметить, мое второе чтение займет файл ввода. Это необходимо, поскольку моя настоящая программа будет иметь это; Теперь, что я хочу сделать, это преобразовать это в псевдоним, однако, когда я выполняю приведенный выше скрипт, я получаю следующие. выход
please enter values
read: Command not found
read: Command not found
a: Undefined variable
Как я могу это исправить, а также я хочу преобразовать все эти 4 строки в многострочный псевдоним. В прошлом я написал однострочный псевдоним без проблем, но не уверен насчет многострочного. если кто-то может помочь, я буду очень благодарен
1 ответ
Как вы обнаружили, оболочка C не имеет встроенного read
функция похожа на функцию снарядов типа Борна.
Я не опытный в csh
Synatax, но, насколько я знаю, ближайший эквивалент заключается в использовании специальной переменной $<
, От man csh
:
$< Substitutes a line from the standard input, with no further interpretation. It can be used to read from the keyboard in a shell script.
например
$ cat myscript.csh
#!/bin/csh
echo 'please enter values'
set a = $<
set b = $<
echo "My values are $a and $b"
который дает
$ ./myscript.csh
please enter values
123
abc
My values are 123 and abc
Обратите внимание, что существуют различия, зависящие от реализации, в том, как $<
обрабатывает ввод нескольких слов - в частности, Tenex tcsh
не заключает в кавычки ввод по умолчанию, вместо этого требуется $<:q
чтобы получить то же поведение, что и BSD csh
, Также, насколько я знаю, нет встроенной поддержки редактирования readline, эквивалентной оболочке bash. read -e
,
Что касается многострочных псевдонимов, они, похоже, работают:
% alias jo '\
echo "please enter values "\
set a = $< \
set b = $< \
echo "My values are $a and $b"'
%
% alias
jo
echo "please enter values "
set a = $<
set b = $<
echo "My values are $a and $b"
Тестирование это
% jo
% please enter values
123
foo bar
My values are 123 and foo bar
%
однако это не та функция, на которую я бы рекомендовал опираться.