2014-05-13 4 views
1

Я не знаю, действительно ли этот вопрос подходит для этой фоны, скорее всего, это не так, но все же здесь мы идем;Переименование поведения исполняемых изменений

После запуска команды invalid в программе unix; Я получил знакомый;

Usage: PROGRAM [OPTION]... [FILE]... 

Поскольку я был в процессе рассмотрения программы, в то время как я это делал, возникла мысль. А именно, что программа на С ++ может быть легко реализована для изменения поведения, основанного на имени исполняемого файла (т. Е. По первому аргументу в argv).

У меня нет абсолютно никакой идеи, почему это было бы полезно, я знаю, что argv[0] может быть полезен, но кто-нибудь видел программу, которая сделала это (изменилось поведение при смене имени) и что-то добилась?

+0

Вы также можете изменить его. Тогда ps показывает новое имя! Весело, но не так полезно. –

+0

Это разрешено стандартом? – Skeen

ответ

3

Да, это рутина (но хорошо сделано для того, чтобы понять, что это можно сделать). Например:

$ (cd /usr/bin; ls -li | grep -w vim) 
2704450 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 ex -> vim 
2704451 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 rview -> vim 
2704452 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 rvim -> vim 
2378579 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 vi -> vim 
2704453 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 view -> vim 
2343880 -rwxr-xr-x 1 root  wheel 1472736 Oct 31 2013 vim 
2704454 lrwxr-xr-x 1 root  wheel   3 Oct 31 2013 vimdiff -> vim 
$ 

Таким образом, vim исполняемый также может быть вызван в качестве vimdiff или view или vi или ex и он будет вести себя по-разному в зависимости от того, как она вызывается. В некоторых системах это будут жесткие ссылки вместо символических ссылок (данные из Mac OS X 10.9.2 Mavericks), поэтому вам нужно будет grep для номера inode вместо vim.

Другой пример:

Bash работает по-другому, когда вызывается как bash по сравнению с, когда она вызывается как sh. Классический, раковины признают, когда они вызываются с тиром - перед их именем (-sh, -bash и т.д.), и действовать в качестве оболочек входа в системе, когда вы делаете что:

$ ps 
    PID TTY   TIME CMD 
39301 ttys000 0:01.30 -bash 
46766 ttys001 0:00.24 -bash 
$ 
+0

Ничего себе, это приятно; Я не знал, что это приложение для реальной жизни. Также такие приложения, как busybox, реализованы? - У меня была идея, что эти вещи были реализованы через. скрытые команды, переданные исполняемому файлу, но, по-видимому, нет. – Skeen

+0

Я смутно знаю Busybox; Я бы предположил, что он работает в этом направлении, но я не знаю точно. –

+0

У меня есть программа 'sqlcmd' (до начала знакомства с Microsoft в течение десятилетия или более!), Которая имеет ссылки' sqlunload' и 'sqlreload', и она ведет себя по-разному в зависимости от того, какое имя используется (хотя вы можете также переведите его в режим «выгрузки» с опцией «-U» и «перезагрузить» режим с помощью «-R»). –