The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > UNIX для чайников Вопросы И Ответы > Ответы на часто задаваемые вопросы > Советы и руководства
.
Google unix.com



Советы и руководства Полезные статьи от наших пользователей.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Обучение Oracle ADF: начинающий История iBot Oracle Обновления (RSS) 0 04-06-2008 05:10 AM
КЭП и история по рыбным iBot Комплекс обработки событий RSS Новости 0 12-17-2007 05:50 AM
Бангкок пост "Статья: История позади Linux операционной системой Neo Новости, ссылки, события и объявления 0 04-05-2003 09:05 AM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Регистрация: август 2001
Место проведения: Ashburn, Вирджиния
Сообщения: 9111
Вся история на #! / USR / BIN / KSH

Введение

Первоначально, мы только один корпус с Unix. Когда команда побежала, корпуса будут пытаться ссылаться на одно из EXEC () системные вызовы на нем. Это команда является исполняемым в EXEC удастся, и команда будет идти. Если EXEC () не, на корпусе, не сдаваться, а он будет пытаться интерпретировать команду файла, как если бы это был скрипт. Это отлично работает до тех пор, пока существует только один корпус с системой. Но что, если вы используете одну оболочку в качестве интерактивных и хотите запустить скрипт, написанный на другой оболочке языка?

Это где #! Хитрость приходит дюйм Идея использования # представлять комментарий возникла с csh и быстро добавить в Bourne оболочки. Теперь все орудия знаю игнорировать вещи после #. Таким образом, мы можем добавить ведущей линии то вроде "#! / USR / BIN / KSH". Для корпуса этой линии просто комментарий. Но если ядро пытается выполнить файл с этой линии, она будет EXEC указанного переводчик и пройти сценарий к нему. Так скриптов стал исполняемого так же, как настоящие исполнимые файлы имеют. Теперь, когда оболочка пытается EXEC скрипт, это удается.

Что делать, если вы оставите у #! линию? Итак, ядро EXEC не удастся. Средняя оболочка будет пытаться запустить скрипт сам. Несколько снарядов попытается проверить скрипт, чтобы попытаться угадать язык. Это не хорошо. Вы можете быть запущена KSH качестве интерактивной оболочки и KSH написания скриптов. Если вы позже переключиться на Баш качестве интерактивной оболочки, некоторые ваши скрипты могут продолжать работать в то время как другие могут оказаться безуспешными. Также линия это комментарий , что представляет собой важный ключ к программисту, который смотрит на скрипт, чтобы понять его. Зная, на каком языке автор пытается использовать это большая помощь.

Хотя я использовал термин "оболочка", на самом деле этот метод может быть использован со многими программами, которые не являются орудий. Вот "сценария", чтобы отобразить многострочном сообщения:
Код:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Это покажет, что "#! / USR / BIN / кот" линии, но, кроме того, оно работает довольно хорошо.

Проходя аргумент

Вы можете сдать единый аргумент следующим образом:
#! / USR / местное / BIN /Perl -W
Но, в общем, вы ограничены один аргумент. На большинстве систем, в строку: "#! / Некоторые / переводчик-A-B" приведет к "-A-B" быть принят в качестве единого аргумента. Тем не менее, единственный аргумент, не только начиная с дефиса. Мы можем улучшить наше послание сценария:
Код:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Пример

Давайте все это вместе с примером. Вот Perl Сценарий, который мне позвонит perlargs:
Код:
#! /usr/local/bin/perl -w

#! /usr/local/bin/perl -w
print "script name is ", $0, "\n";
while (@ARGV) {
        $ARGV = shift @ARGV;
        print "argument ", $i++,  " is ", $ARGV, "\n";
}

system "ps -f -ww";

В-З спросит Perl Вопрос предупреждающие сообщения. Скрипт просто выводит свои аргументы, а затем запускает PS команду. Когда я запускаю ее, я получаю:
Код:
$ ./perlargs one two three
Name "main::i" used only once: possible typo at ./perlargs line 10.
script name is ./perlargs
argument 0 is one
argument 1 is two
argument 2 is three
                 UID        PID   PPID    STIME TTY     TIME CMD
                 perderabo   69      1 17:47:28 n01  0:00.24 /bin/ksh -l
                 perderabo  201     69 18:28:22 n01  0:00.03 /usr/local/bin/perl -w ./perlargs one two three
                 perderabo 2055    201 18:28:22 n01  0:00.01 ps -f -ww
$
Отметим, что Perl Процесс открывается с 5 аргументов. 2-й аргумент является именем скрипта. Это до Perl процесс представить окончательный 3 аргументов в качестве аргумента список рассматривается сценарий. Кроме того, реализовать ядра начали Perl процесса. После этого, он до Perl Чтобы открыть сценарий и читать его и выполнить каждую строку. Поэтому сценарии должны быть читаемыми. Вы не можете выполнить, не читаем сценарий.

Заключение

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

Закладки

Теги
Perl, Perl сдвиг, хибарка, перемещение, переход на Perl

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 12:51 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0