При такой проблеме я использовал вариант-p
:
su -pc./http-app.py www-data
-p :окружающая среда сохраняется. В частности, он не пытается войти в систему с новой учетной записью, поэтому вы не получаете сообщение:This account is currently not available.
.
Дополнительная точка -на Centos 7, sh
является символической ссылкой на bash
. Для sh
нет отдельного двоичного файла.
[root@work ~]# ls -la `which sh`
lrwxrwxrwx. 1 root root 4 Jun 16 2020 /usr/bin/sh -> bash
[root@work ~]# ls -la /bin/sh
lrwxrwxrwx. 1 root root 4 Jun 16 2020 /bin/sh -> bash
[root@work ~]# rpm -qf /usr/bin/sh /bin/sh
bash-4.2.46-34.el7.x86_64
bash
, dash
, busybox
и, вероятно, другие оболочки могут проверять командную строку, с которой они были запущены, и будут притворяться чем-то -, например обычным sh
, если они так называются. Эта символическая ссылка позволяет этому случиться.
Вы всегда можете ожидать, что /bin/sh
будет там и будет базовой оболочкой.
Что такое /bin/sh
? Мы говорим о наследии Unix здесь! Немного истории:
sh
— это Bourne Shell, она была выпущена в 1979 году в версии 7 Unix. Он приобрел популярность после публикации Брайаном Керниганом и Робом Пайком книги «Среда программирования Unix» — первой коммерчески изданной книги, в которой оболочка представлялась как язык программирования в виде учебного пособия.
ksh
, оболочка Korn, первоначально написанная Дэвидом Корном, была основана на оригинальном исходном коде оболочки Bourne, это была промежуточная дорога между оболочкой Bourne и csh
оболочкой C. Его синтаксис был в основном взят из оболочки Bourne, а его функции управления заданиями напоминали возможности оболочки C. Функциональность оригинальной оболочки Korn была использована в качестве основы для стандарта оболочки POSIX.
bash
— это «Оболочка Bourne Again». Синтаксис Bash является надмножеством синтаксиса оболочки Bourne. Синтаксис Bash включает в себя идеи, почерпнутые из оболочки Korn и оболочки C, такие как редактирование командной строки, команда history
, стек каталогов, переменные $RANDOM и $PPID, а также синтаксис подстановки команд POSIX $ (… )..