0

I run multiple versions of PHP on my Linux server. I've added an alias in my bashrc to point the php command to a specific version alias php='/usr/bin/php7.3'.

This works as expected when I execute a PHP script actually using the php command eg php myscript.php

However, if I make myscript.php an executable and put the shebang #!/usr/bin/env php at the top, it executes the script with the default version of PHP, and does not use the alias defined in my bashrc.

I know I can change the shebang to #!/usr/bin/env /usr/bin/php7.3, but I need this globally, rather than file by file.

Is it possible to set an alias for the php command which is respected in the shebang?

1 Answer 1

3

Is it possible to set an alias for the php command which is respected in the shebang?

No because shebang is parsed by kernel which doesn't know or care about your shell-specific aliases and environment such as $PATH (this is why you have to provide a full path in the shebang). What you can do is to make php a symlink to the specific php version and prepend the directory that contains it to your PATH so that it will be picked by env.

13
  • I did as you suggested and whilst it works when running the php command, its not getting picked up by env. $PATH contains the directory with my symlink and running env shows the same path, yet the version of PHP run from the shebang is still the default one.
    – Dom
    Commented Jan 21, 2021 at 18:18
  • @Dom: did you add the directory that contains the symlink before an old value of PATH: PATH=<dir>:$PATH? Commented Jan 21, 2021 at 18:23
  • Yes. PATH in my bashrc looks like this PATH=~/bin:$PATH:~/.composer symlink to required version of PHP created in a bin subdirectory of my home directory.
    – Dom
    Commented Jan 21, 2021 at 18:27
  • @Dom: and what does type -a php say? Commented Jan 21, 2021 at 18:28
  • Four lines: php is aliased to /usr/bin/php7.3', /var/www/dom/bin/php, /usr/bin/php and /bin/php
    – Dom
    Commented Jan 21, 2021 at 18:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .