* Re: Emacs script that works on all platforms [not found] <mailman.15.1274382091.29716.help-gnu-emacs@gnu.org> @ 2010-05-20 20:40 ` Frédéric Perrin [not found] ` <3c0b258e-32ae-4ab8-b936-3d304f3e4771@34g2000prs.googlegroups.com> 1 sibling, 0 replies; 6+ messages in thread From: Frédéric Perrin @ 2010-05-20 20:40 UTC (permalink / raw) To: help-gnu-emacs Johan Andersson <johan.rejeep@gmail.com> writes: > I have an Emacs script where the first line looks like this: > #!/usr/bin/emacs --script > > However, on Mac OSX, Emacs is installed by default, but with an old > version. > > I have also installed Emacs via Homebrew (compiled from source) and > can run that with: > /Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs > > So, to run the script with the Homebrew version, I could change the > first line in my script to: > #!/Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs > --script > > That works, but I want this script to work on both GNU/Linux and Mac > OSX (Both default and Homebrew version). > > I was thinking I could use env somehow, like this: > #!/usr/bin/env emacs --script > > And then make emacs an alias or function that points to the correct > binary depending on system. But it's still the default Emacs that is > used. In `/usr/bin/env emacs', env(1) will execvp(3) `emacs' ; so it won't follow your shell aliases or functions. Ideas : Put ~/bin as the first thing in your $PATH, and make ~/bin/emacs a symlink to the emacs you want to use. Then, use the `/usr/bin/env emacs' trick. Expand on the sesquicolon as described in [1]. Something like (untested): :; [ `uname` == "linux" ] && exec /usr/bin/emacs --batch -l $0 $* || exec /Usr/local/.../Emacs --batch -l $0 $* [1] http://www.emacswiki.org/emacs/EmacsScripts -- Fred ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <3c0b258e-32ae-4ab8-b936-3d304f3e4771@34g2000prs.googlegroups.com>]
* Re: Emacs script that works on all platforms [not found] ` <3c0b258e-32ae-4ab8-b936-3d304f3e4771@34g2000prs.googlegroups.com> @ 2010-05-22 12:31 ` Tassilo Horn 0 siblings, 0 replies; 6+ messages in thread From: Tassilo Horn @ 2010-05-22 12:31 UTC (permalink / raw) To: help-gnu-emacs Xah Lee <xahlee@gmail.com> writes: Hi Xah, > from my experiences, it's best to avoid the shebang construct. Just > call the program directly. Yes, that's absolutely the best thing to do for scripts that should run on many systems on different platforms. ;-) Bye, Tassilo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Emacs script that works on all platforms @ 2010-05-20 19:01 Johan Andersson 2010-05-21 13:24 ` Tassilo Horn 0 siblings, 1 reply; 6+ messages in thread From: Johan Andersson @ 2010-05-20 19:01 UTC (permalink / raw) To: help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 861 bytes --] Hey, I have an Emacs script where the first line looks like this: #!/usr/bin/emacs --script However, on Mac OSX, Emacs is installed by default, but with an old version. I have also installed Emacs via Homebrew (compiled from source) and can run that with: /Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs So, to run the script with the Homebrew version, I could change the first line in my script to: #!/Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs --script That works, but I want this script to work on both GNU/Linux and Mac OSX (Both default and Homebrew version). I was thinking I could use env somehow, like this: #!/usr/bin/env emacs --script And then make emacs an alias or function that points to the correct binary depending on system. But it's still the default Emacs that is used. Any ideas how I could solve this? [-- Attachment #2: Type: text/html, Size: 1142 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Emacs script that works on all platforms 2010-05-20 19:01 Johan Andersson @ 2010-05-21 13:24 ` Tassilo Horn 2010-05-27 12:51 ` Johan Andersson [not found] ` <mailman.0.1274964713.14889.help-gnu-emacs@gnu.org> 0 siblings, 2 replies; 6+ messages in thread From: Tassilo Horn @ 2010-05-21 13:24 UTC (permalink / raw) To: help-gnu-emacs Johan Andersson <johan.rejeep@gmail.com> writes: Hi Johan, > #!/usr/bin/emacs --script > > However, on Mac OSX, Emacs is installed by default, but with an old > version. > > I have also installed Emacs via Homebrew (compiled from source) and can run > that with: > /Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs > > [...] > > I was thinking I could use env somehow, like this: > #!/usr/bin/env emacs --script > > And then make emacs an alias or function that points to the correct > binary depending on system. But it's still the default Emacs that is > used. "env cmd" uses the cmd it finds first when checking the directories in your $PATH. For example I have: --8<---------------cut here---------------start------------->8--- % echo $PATH /home/horn/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.4.3:/usr/games/bin --8<---------------cut here---------------end--------------->8--- Now I make a symlink to `less' that I call `emacs' inside /home/horn/bin: --8<---------------cut here---------------start------------->8--- % cd ~/bin % ln -s /usr/bin/less emacs % zsh # start a new shell % emacs Missing filename ("less --help" for help) --8<---------------cut here---------------end--------------->8--- So as you can see, when calling `emacs' it finds the emacs-symlink to less first, cause that resides in a directory that comes before /usr/bin in PATH. HTH, Tassilo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Emacs script that works on all platforms 2010-05-21 13:24 ` Tassilo Horn @ 2010-05-27 12:51 ` Johan Andersson [not found] ` <mailman.0.1274964713.14889.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 6+ messages in thread From: Johan Andersson @ 2010-05-27 12:51 UTC (permalink / raw) To: Tassilo Horn; +Cc: help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 1709 bytes --] Hey, To bad you could not get away with an alias or function though... But it works, thanks for the tip! :) On Fri, May 21, 2010 at 3:24 PM, Tassilo Horn <tassilo@member.fsf.org>wrote: > Johan Andersson <johan.rejeep@gmail.com> writes: > > Hi Johan, > > > #!/usr/bin/emacs --script > > > > However, on Mac OSX, Emacs is installed by default, but with an old > > version. > > > > I have also installed Emacs via Homebrew (compiled from source) and can > run > > that with: > > /Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs > > > > [...] > > > > I was thinking I could use env somehow, like this: > > #!/usr/bin/env emacs --script > > > > And then make emacs an alias or function that points to the correct > > binary depending on system. But it's still the default Emacs that is > > used. > > "env cmd" uses the cmd it finds first when checking the directories in > your $PATH. For example I have: > > --8<---------------cut here---------------start------------->8--- > % echo $PATH > > /home/horn/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.4.3:/usr/games/bin > --8<---------------cut here---------------end--------------->8--- > > Now I make a symlink to `less' that I call `emacs' inside > /home/horn/bin: > > --8<---------------cut here---------------start------------->8--- > % cd ~/bin > % ln -s /usr/bin/less emacs > % zsh # start a new shell > % emacs > Missing filename ("less --help" for help) > --8<---------------cut here---------------end--------------->8--- > > So as you can see, when calling `emacs' it finds the emacs-symlink to > less first, cause that resides in a directory that comes before > /usr/bin in PATH. > > HTH, > Tassilo > > > [-- Attachment #2: Type: text/html, Size: 2375 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <mailman.0.1274964713.14889.help-gnu-emacs@gnu.org>]
* Re: Emacs script that works on all platforms [not found] ` <mailman.0.1274964713.14889.help-gnu-emacs@gnu.org> @ 2010-05-27 14:12 ` Pascal J. Bourguignon 0 siblings, 0 replies; 6+ messages in thread From: Pascal J. Bourguignon @ 2010-05-27 14:12 UTC (permalink / raw) To: help-gnu-emacs Johan Andersson <johan.rejeep@gmail.com> writes: > Hey, > > To bad you could not get away with an alias or function though... But it works, thanks for the tip! :) > > On Fri, May 21, 2010 at 3:24 PM, Tassilo Horn <tassilo@member.fsf.org> wrote: > > Johan Andersson <johan.rejeep@gmail.com> writes: > > Hi Johan, > > > #!/usr/bin/emacs --script > > > > However, on Mac OSX, Emacs is installed by default, but with an old > > version. > > > > I have also installed Emacs via Homebrew (compiled from source) and can run > > that with: > > /Usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs > > > > [...] > > > > I was thinking I could use env somehow, like this: > > #!/usr/bin/env emacs --script Well, unfortunately, someimes, env is /bin/env sometimes it's in /usr/bin/env, so this doesn't really work either. (Of course, one of these system is broken, but that's the deal). So if you do a symlink to repair env, why not for emacs? > Now I make a symlink to `less' that I call `emacs' inside > /home/horn/bin: That's an acceptable solution for your own needs. I even do it "per project", installing project specific tool versions in a "opt" directory, and generating an env.sh shell commands file to set the PATH et al. for a specific project. When I switch from one project to another, I just have to source the env.sh from the opt directory of the new project, and I get all the tools and libraries in the versions needed by that project. But if you want to provide a script to other users on the same system or on another system, you need something else. Two options I find acceptable are either your script can work with various versions, or it should come with an "installation" procedure that will update the #! command. -- __Pascal Bourguignon__ http://www.informatimago.com ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-05-27 14:12 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <mailman.15.1274382091.29716.help-gnu-emacs@gnu.org> 2010-05-20 20:40 ` Emacs script that works on all platforms Frédéric Perrin [not found] ` <3c0b258e-32ae-4ab8-b936-3d304f3e4771@34g2000prs.googlegroups.com> 2010-05-22 12:31 ` Tassilo Horn 2010-05-20 19:01 Johan Andersson 2010-05-21 13:24 ` Tassilo Horn 2010-05-27 12:51 ` Johan Andersson [not found] ` <mailman.0.1274964713.14889.help-gnu-emacs@gnu.org> 2010-05-27 14:12 ` Pascal J. Bourguignon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).