exodist / app-dispatch Goto Github PK
View Code? Open in Web Editor NEWAlternate to /usr/bin/env with more control
Alternate to /usr/bin/env with more control
NAME App::Dispatch - Tool to have #! dispatch to the best executable for the job. DESCRIPTION App::Dispatch is an alternative to "/usr/bin/env". Unlike "/usr/bin/env", it does not rely on your environment to tell it which program to use. You can set system-wide, and user level configurations for which program to use. You can also specify a cascade of aliases and/or paths to search. Lately it has been a trend to avoid the system install of programming languages, Perl, Ruby, Python, etc, in most cases it is recommended that you do not use the system installation of the language. A result of this is heavy use of "#!/usr/bin/env" to lookup the correct binary to execute based on your $PATH. The problem with "/usr/bin/env" is that you may not always have control over the environment. For example if you have a script that you must run with sudo, your $PATH will be reset. With App::Dispatch you can specify multiple locations to try when looking for the program. You can also configure aliases at the system or user level. This is useful when you have multiple versions of the program installed and wish different things to use different ones by a label. In this way the versions need not be in the same location on each machine that can run the script. SYNOPSYS NO CONFIG The following #! line will cause the script to be run by perl, it will try each path listed in order. #!/usr/local/bin/dispatch perl /path/to/perl /alternate/path/to/perl /another/perl This tells the script to use the specified path if available, otherwise fall back to whichever perl is in the environment. #!/usr/local/bin/dispatch perl /path/to/perl ENV You can also pass arguments to the program by putting them after "--": #!/usr/local/bin/dispatch perl /path/to/perl ENV -- -w WITH CONFIG $HOME/.dispatch.conf: [perl] SYSTEM = /usr/bin/perl DEFAULT = /opt/ACME/current/bin/perl production = /opt/ACME/stable/bin/perl This #! line will run perl, it will find the 'production' perl, if no production perl is found it will try 'DEFAULT'. Anything after the -- is passed as arguments to perl. #!/usr/local/bin/dispatch perl production DEFAULT -- -w This will run the default perl. #!/usr/local/bin/dispatch perl CONFIG FILES LOCATIONS Locations are loaded in this order. All locations that exist are loaded. Later files can override earlier ones. /etc/dispatch.conf The system wide configuration /etc/dispatch/* System wide config dir, to have app specific config files for easier management with system packages. $HOME/.dispatch.conf User specific overrides or additions. EXAMPLE [perl] SYSTEM = /usr/bin/perl DEFAULT = /opt/ACME/current/bin/perl production = /opt/ACME/stable/bin/perl [gcc] SYSTEM = /usr/bin/gcc DEFAULT = /usr/bin/gcc old = /opt/legacy/bin/gcc NOTE FOR CPAN AUTHORS This tool is very useful for perl shops in their own scripts. However it most likely should not be used in any scripts that will be installed with a cpan distribution. Distributions should use a normal #! line that will be rewritten by the build tools to use the perl for which the dist was installed. This is important because of dependency chains and XS modules. AUTHORS Chad Granum [email protected] COPYRIGHT Copyright (C) 2013 Chad Granum App-Dispatch is free software; Standard perl licence. App-Dispatch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.