LINUX.ORG.RU

Вызванный как sh, bash пытается вести себя как sh. Получается это у него (по крайней мере в редхате) плохо, некоторые башизмы все равно работают.

Deleted
()

Ну не читает он твой bashrc, вот и все. Sh должен читать свой rc, поэтому башик умеет определять, а не алиаса ли он запущен (как и tsh и прочие шеллы), и запускаться с правильным файлом настроек.

anonymous
()
Ответ на: комментарий от anonymous

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

safocl ★★
() автор топика

Баш при запуске проверяет по какому пути его вызывали, если вызывали как bash (/bin/bash) - ведет себя как баш, если вызывали как sh (/bin/sh) ведет себя как шелл (ну или старается).

zaz ★★★★
()
Ответ на: комментарий от safocl

есть еще чудный бинарник busybox там вообще зоопарк, он может быть и шелом, и ps, и сat и еще кучей стандартных тулзов.

zaz ★★★★
()

проверка argv[0]

Deleted
()
Ответ на: комментарий от Deleted

Вызванный как sh, bash пытается вести себя как sh. Получается это у него плохо, некоторые башизмы все равно работают.
башизмы работают

Чавой?

Zmicier ★★★★★
()
Ответ на: комментарий от safocl

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

Кого вы спрашиваете? Возьмите — да и проверьте.

Если непонятно, как это работает — почитайте руководство.

6.11 Bash POSIX Mode
====================

Starting Bash with the '--posix' command-line option or executing 'set
-o posix' while Bash is running will cause Bash to conform more closely
to the POSIX standard by changing the behavior to match that specified
by POSIX in areas where the Bash default differs.

   When invoked as 'sh', Bash enters POSIX mode after reading the
startup files.

(info "(bash) Bash POSIX Mode")

Если все равно непонятно — почитайте саму программу:

static void
set_shell_name (argv0)
     char *argv0;
{
  /* Here's a hack.  If the name of this shell is "sh", then don't do
     any startup files; just try to be more like /bin/sh. */
  shell_name = argv0 ? base_pathname (argv0) : PROGRAM;

  if (argv0 && *argv0 == '-')
    {
      if (*shell_name == '-')
	shell_name++;
      login_shell = 1;
    }

  if (shell_name[0] == 's' && shell_name[1] == 'h' && shell_name[2] == '\0')
    act_like_sh++;
  if (shell_name[0] == 's' && shell_name[1] == 'u' && shell_name[2] == '\0')
    su_shell++;

  shell_name = argv0 ? argv0 : PROGRAM;
  FREE (dollar_vars[0]);
  dollar_vars[0] = savestring (shell_name);

  /* A program may start an interactive shell with
	  "execl ("/bin/bash", "-", NULL)".
     If so, default the name of this shell to our name. */
  if (!shell_name || !*shell_name || (shell_name[0] == '-' && !shell_name[1]))
    shell_name = PROGRAM;
}

shell.c

Zmicier ★★★★★
()

Потому что sh != bash.

+И да ничто не мешает тебе в качестве sh использовать к примеру busybox.

Всегда твой. С любовью. Капитан.

init_6 ★★★★★
()
Последнее исправление: init_6 (всего исправлений: 1)
Ответ на: комментарий от init_6

Капитан, а не подскажешь, насколько sh из busybox годится для повседневного использования? Заработает ли на нём скрипт, который я написал под классический шелл из фреебзд?

IPR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.