Ошибка при выполнении чтения запрашивает в csh и преобразовании в многострочный псевдоним

Эй все, у меня есть эта проблема, где у меня есть пример программы в csh (я знаю, что не лучший язык использует для сценариев, но у меня нет опции здесь), как foll:

#!/bin/csh    
echo 'please enter values' 
read a 
read -e b
echo "My values are $a and $b" 

Поскольку Вы могли бы видеть, что мое второе чтение собирается взять вход файла. Это необходимо, поскольку моя фактическая программа будет иметь это; теперь то, что я хочу сделать, должно преобразовать это для искажения однако, когда я выполняю вышеупомянутый сценарий, я получаю вывод foll.

please enter values
read: Command not found
read: Command not found
a: Undefined variable

Как я могу зафиксировать это, и также я хочу преобразовать это все 4 строки в многострочный псевдоним. Я записал однострочный псевдоним в прошлом без проблем, но не уверенный в мультилинии. если кто-то может выручить, я буду действительно благодарен

0
задан 28 August 2018 в 20:25

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, редактирующий поддержку, эквивалентную оболочке удара 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
%

однако это не функция, на которую я рекомендовал бы полагаться.

1
ответ дан 28 October 2019 в 01:56

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

Похожие вопросы: