Intereting Posts
Найдите файл и создайте символическую ссылку для родителя с помощью find и -exec рекомендуемая процедура для создания пользователя / группы во время установки RPM Лучше, чем `tee | разрезать | … | paste` Как предотвратить ошибочный rm -rf для определенных папок? Ограничение FTP-соединений по областям Происхождение записи / etc / termcap linux Некоторые буквы на gnome-terminal не могут быть введены конкретным пользователем Как проверить, что пользователь / пароль истек в AIX? Сравните два файла и значения соответствия печати без игнорирования дубликатов Устройство блокировки Systemd перед другим блоком Конвертировать PDF в другой размер страницы (Письмо США -> A4) Нежелательные сообщения при каждом входе в систему? Узнайте, какое конкретное устройство является запоминающим устройством USB Возможно ли создать динамический 1-байтовый файл в Linux? Как сделать модуль динамически загружаемым на Debian?

`tcsh` повторить с подоболочкой

Я пытаюсь понять, как повторять сложную команду внутри повтора в tcsh , например

 repeat 9999 (curl http://localhost:80/index.php; echo) 

Я использую subhell здесь вместо { и } потому что, согласно http://hyperpolyglot.org/unix-shells , tcsh не имеет этой функции.

Тем не менее, я получаю следующую непредвиденную ошибку из предыдущей конструкции.

 Badly placed ()'s 

Итак, как вы повторяете сложную команду с tcsh ?

Есть несколько старых rants там о странных несоответствиях csh и, кстати, tcsh , например, этот http://www.grymoire.com/unix/CshTop10.txt . Поэтому я не уверен, что думать об этой ошибке.

Из tcsh(1) :

 repeat count command The specified command, which is subject to the same restric‐ tions as the command in the one line if statement above, is executed count times. [..] 

И из документации if :

 if (expr) command [..] command must be a simple command, not an alias, a pipeline, a command list or a parenthesized command list, but it may have arguments. [..] 

Похоже, это не то, что вы можете сделать.

Чтобы обойти это, вы можете использовать простой сценарий оболочки.

Другим обходным решением будет использование ZSH.

 % repeat 3 (echo hi; echo there) hi there hi there hi there % 

Поскольку repeat – встроенная команда, но не часть синтаксиса, вы не можете легко использовать () s в списке аргументов.

Даже с Bourne Shell которая менее ограничена, чем tcsh

 repeat -c 3 (echo a) 

не будет работать.

Что работает:

 (repeat -c 10 echo a) 

так как это выполняет всю команду в подоболочке. Но даже:

 (repeat -c 3 echo a; echo b) 

повторит echo a три раза, но просто вызовет echo b один раз ..

Однако:

 repeat -c 3 "echo a" 

рекомендуется, если вам нравится повторять более сложную команду с помощью встроенного repeat . Это работает даже для менее простых команд, потому что repeat ведет себя аналогично eval .

Я думаю, вы можете использовать для этого «eval», например:

 repeat 7 eval "cmd1;cmd2"