Как настроить командную оболочку командной строки на bash?

Как изменить командную оболочку от sh до bash?

При запуске at я получаю сообщение warning: commands will be executed using /bin/sh:

at 23:33                                                              
warning: commands will be executed using /bin/sh

Как я могу установите для оболочки по умолчанию /bin/bash вместо /bin/sh

1
задан 3 October 2016 в 01:51

1 ответ

Вы не можете изменить оболочку по умолчанию at, она жестко закодирована как /bin/sh в источнике.

Исходный код at разъясняет это из at.c:

    /* POSIX.2 allows the shell specified by the user's SHELL environment                                                           
       variable, the login shell from the user's password database entry,                                                                
       or /bin/sh to be the command interpreter that processes the at-job.                                                               
       It also alows a warning diagnostic to be printed.  Because of the                                                                
       possible variance, we always output the diagnostic. */

    fprintf(stderr, "warning: commands will be executed using /bin/sh\n");

Реализация из atd.c:

if (execle("/bin/sh", "sh", (char *) NULL, nenvp) != 0)

Соответственно соответствующая страница соответствует:

и командному считыванию со стандартного ввода или заданного файла, которые должны быть выполнены позднее, используя / bin / sh.

Это дает вам возможность перекомпилировать вашу собственную копию как единственное решение для удовлетворения ваших потребностей.

6
ответ дан 23 May 2018 в 05:33
  • 1
    Ну ... он также мог бы символизировать bash до /bin/xy (или любой 7-символьный или более короткий абсолютный путь) и вручную отредактировать правильную строку /bin/sh в скомпилированном двоичном файле at, чтобы быть новым путем (не действительно рекомендуется всем, кто не является удобным шестимерным редактором двоичных файлов, но возможно). – mtraceur 3 October 2016 в 04:19
  • 2
    @mtraceur Или что;) – heemayl 3 October 2016 в 07:29
  • 3
    @mtraceur Это кажется надуманным, особенно если строка интернирована один раз, но имеет несколько применений - моя точка зрения, источник следует перекомпилировать, а не редактировать двоичные файлы – cat 3 October 2016 в 14:48
  • 4
    @cat: +1, потому что это хорошая для понимания техничность в целом. Но в этом практическом случае я думаю, что если вы решите сделать такое решение hack-y, тогда возникает реальный вопрос: действительно ли at использует строку /bin/sh\0 для всего, что сломалось бы, если бы оно закончилось тем же строковый литерал, с этим конкретным изменением? Даже не глядя на источник, но зная, что делает at, я довольно уверен, что, скорее всего, ответ будет отрицательным, на самом деле это не проблема. Но да, это возможность отметить. – mtraceur 4 October 2016 в 08:25

Другие вопросы по тегам:

Похожие вопросы: