Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Vadim Goncharov                      2:5020/400     25 Dec 2006  08:24:44
 To : Victor Sudakov
 Subject : Re: cvs admin -m
 -------------------------------------------------------------------------------- 
 
 Hi Victor Sudakov! 
 
 On Mon, 25 Dec 2006 02:51:02 +0000 (UTC); Victor Sudakov wrote about 'Re: cvs
 admin -m':
 
  >> test$ echo "test line 1" >testmsg
  >> test$ echo "test line 2" >>testmsg
  >> test$ cvs admin -m 1.1:"`cat testmsg`" test.s
  >> RCS file: /Users/timon/cvsr/test/test.s,v
  >> done
  VS> Что за шелл у тебя?
  
 Любой sh-compatible.
 
  VS> У меня под tcsh вот так:
 
  VS> $ jot -w line 12 > log.txt
  VS> $ cvs admin -m 1.2:"`cat log.txt`" file.txt
  VS> cvs admin: while processing more than one file:
  VS> cvs [admin aborted]: attempt to specify a numeric revision
  VS> $
  VS> $ cvs admin -m 1.2:"test " file.txt
  VS> RCS file: /home/sudakov/tmp/hren/q1/file.txt,v
  VS> done
  VS> $
  VS> Откуда получается "more than one file", не могу понять.
 
 Потому что tcsh игнорирует кавычки и разворачивает строку в несколько
 аргументов тем же макаром, что и без кавычек, в отличие от нормального
 шелла, передающего в этом случае. Он вообще говно, особенно для
 скриптования (целый документик по теме был).
 
 P.S. Демонстрация. Мой комментирующий текст выделен цитированием.
 
 > Пишем иллюстративную программку
 
 #include <stdio.h>
 
 int main(int argc, char *argv[])
 {
         printf("argc=%d\n", argc);
         while (argc > 1) {
                 printf("%s|", argv[1]);
                 argc--;
                 argv++;
         }
         printf("\n");
 
         return 0;
 }
 
 > и компилим её:
 
 % gcc -o echoer echoer.c
 
 > после чего запускаем в нормальном шелле (zsh):
 
 % ./echoer `cat realpath.txt`
 argc=66
 REALPATH(1)|Справочник|основных|команд|FreeBSD|REALPATH(1)|HАЗВАHИЕ|realpath|--|
 возвращает|преобразованный|физический|путь|СИHТАКСИС|realpath|путь|ОПИСАHИЕ|Прог
 рамма|realpath|использует|функцию|realpath(3)|для|вычисления|всех|символических|
 ссылок?),|дополнительных|символов|'/',|а|так|же|ссылок|на|/./|и|/../|внутри|пути
 .|СТАТУС|ЗАВЕРШЕHИЯ|Программа|realpath|возвращает|0|в|случае|успеха|и|>0,|если|п
 роизошла|ошибка.|СМОТРИ|ТАКЖЕ|realpath(3)|ИСТОРИЯ|Команда|realpath|впервые|появи
 лась|во|FreeBSD|4.3.|
 % ./echoer "`cat realpath.txt`"
 argc=2
 REALPATH(1)           Справочник основных команд FreeBSD       REALPATH(1)
 
 HАЗВАHИЕ
      realpath -- возвращает преобразованный физический путь
 
 СИHТАКСИС
      realpath путь
 
 ОПИСАHИЕ
      Программа realpath использует функцию realpath(3) для вычисления всех
      символических ссылок?), дополнительных символов '/', а так же ссылок
      на /./ и /../ внутри пути.
 
 СТАТУС ЗАВЕРШЕHИЯ
      Программа realpath возвращает 0 в случае успеха и >0, если произошла
      ошибка.
 
 СМОТРИ ТАКЖЕ
      realpath(3)
 
 ИСТОРИЯ
      Команда realpath впервые появилась во FreeBSD 4.3.|
 
 > Видим, что указание кавычек возмело эффект - шелл передал программе
 > содержимое целиком. Теперь запускаем csh и повторяем то же в нём:
 
 % tcsh
 % ./echoer `cat realpath.txt`
 argc=66
 REALPATH(1)|Справочник|основных|команд|FreeBSD|REALPATH(1)|HАЗВАHИЕ|realpath|--|
 возвращает|преобразованный|физический|путь|СИHТАКСИС|realpath|путь|ОПИСАHИЕ|Прог
 рамма|realpath|использует|функцию|realpath(3)|для|вычисления|всех|символических|
 ссылок?),|дополнительных|символов|'/',|а|так|же|ссылок|на|/./|и|/../|внутри|пути
 .|СТАТУС|ЗАВЕРШЕHИЯ|Программа|realpath|возвращает|0|в|случае|успеха|и|>0,|если|п
 роизошла|ошибка.|СМОТРИ|ТАКЖЕ|realpath(3)|ИСТОРИЯ|Команда|realpath|впервые|появи
 лась|во|FreeBSD|4.3.|
 % ./echoer "`cat realpath.txt`"
 argc=18
 REALPATH(1)           Справочник основных команд FreeBSD   REALPATH(1)|HАЗВАHИЕ|
 realpath -- возвращает преобразованный физический путь|СИHТАКСИС|     realpath
 путь|ОПИСАHИЕ|     Программа realpath использует функцию realpath(3) для
 вычисления всех| символических ссылок?), дополнительных символов '/', а так же
 ссылок|на /./ и /../ внутри пути.| |СТАТУС ЗАВЕРШЕHИЯ|     Программа realpath
 возвращает 0 в случае успеха и >0, если произошла|ошибка.|СМОТРИ ТАКЖЕ| 
 realpath(3)|ИСТОРИЯ|     Команда realpath впервые появилась во FreeBSD 4.3.|
 
 > Видим, что tcsh сделал это несовместимым образом - засунул каждую
 > строку в свой аргумент. Так что читаем древнюю статью Csh Programming
 > Considered Harmful (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) и
 > выкидываем его нафиг.
 
 -- 
 WBR, Vadim Goncharov. ICQ#166852181       mailto:vadim_nuclight@mail.ru
 [Moderator of RU.ANTI-ECOLOGY][FreeBSD][http://antigreen.org][LJ:/nuclight]
 --- slrn/0.9.8.1 on FreeBSD 4.11/i386
  * Origin: Nuclear Lightning @ Tomsk, TPU AVTF Hostel (2:5020/400@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: cvs admin -m   Victor Sudakov   22 Dec 2006 16:12:44 
 cvs admin -m   Artem S. Ignatiev   24 Dec 2006 03:57:48 
 Re: cvs admin -m   Victor Sudakov   24 Dec 2006 09:06:18 
 cvs admin -m   Artem S. Ignatiev   25 Dec 2006 04:08:42 
 Re: cvs admin -m   Victor Sudakov   25 Dec 2006 06:51:02 
 Re: cvs admin -m   Vadim Goncharov   25 Dec 2006 08:24:44 
 Re: cvs admin -m   Victor Sudakov   25 Dec 2006 09:06:25 
 Re: cvs admin -m   Vadim Goncharov   25 Dec 2006 09:58:37 
 cvs admin -m   Artem S. Ignatiev   25 Dec 2006 13:51:38 
 Re: cvs admin -m   Victor Sudakov   25 Dec 2006 16:06:49 
 cvs admin -m   Artem S. Ignatiev   25 Dec 2006 20:55:46 
 Re: cvs admin -m   Valentin Davydov   25 Dec 2006 21:36:09 
 Re: cvs admin -m   Victor Sudakov   26 Dec 2006 07:39:12 
Архивное /ru.unix.bsd/10359eaf05b05.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional