Today I learned that Composer uses the Symphony Process component for executing the shell commands defined as Composer scripts. This internally calls proc_open()
which “opens a process by creating a bidirectional pipe, forking, and invoking the shell”.
I had this script failing on a Travis build with Ubuntu 14.04.5 LTS and PHP 5.6:
{
"scripts": {
"test": "source scripts/test.sh"
}
}
with the following error:
sh: 1: source: not found
Turns out that /bin/sh
on Ubuntu Trusty is a symlink to /bin/dash
:
$ ls -lah /bin/sh lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -\> dash
And the source
command is a bash built-in which simply isn’t available in dash. The solution is to replace all instances of source something.sh
with . something.sh
(note the space between the dot and the script filename).
Top comments (0)