Ошибка “sh: 1: source: not found” при выполнении через PHP

Выполняя php-скриптом команду

exec("source vars");

вылетала ошибка

sh: 1: source: not found

Хотя сама команда source является встроеной в bash и напрямую с консоли все выполняется. Варианты с sudo, su и прочими танцами с бубном не помагали.
Как оказалось проблема в том, что в Debian 7 по умолчанию как интерпретатор sh используется dash

Debian and derived Linux distributions such as Ubuntu ship a version of ash, known as dash (Debian Almquist shell), as the default /bin/sh, although Bash is the default login shell for interactive use.

Проверить, что используется у вас :

#ls -l `which sh`
/bin/sh -> dash

Перейти на класический интерпретатор:

sudo dpkg-reconfigure dash

На заданый вопрос ответить No
И вуаля:

# ls -l `which sh`
lrwxrwxrwx 1 root root 4 Окт 14 12:27 /bin/sh -> bash

Добавить комментарий