Background
The actual problem I'm trying to solve is that Tramp does not use the PATH
of the remote machine it's SSH-ing to. One workaround is to from the client set PATH
depending on which machine Tramp is visiting.
The emacs manual describes how to set this up for a single machine.
Single machine matching
#+begin_src bash :dir /ssh:hype:/
hostname
echo $PATH
mmlsfs -h
#+end_src
#+RESULTS[d90ea0d78b70c282ea255dc55e1aad9261bc8ca9]:
: hype
: /usr/bin:/bin:/sbin:/usr/sbin:/usr/local/sbin
: bash: line 4: mmlsfs: command not found
#+begin_src elisp
(connection-local-set-profile-variables 'remote-path-with-gpfs
'((tramp-remote-path . ("/usr/lpp/mmfs/bin/" tramp-default-remote-path))))
(connection-local-set-profiles
'(:application tramp :machine "hype") 'remote-path-with-gpfs)
#+end_src
#+RESULTS[9e4a07fa589fb89a3ba5f5e00af3fddd222aa33a]:
: ((:application tramp :machine "hype")
: remote-path-with-gpfs)
: ((:application tramp)
: tramp-connection-local-default-profile))
#+begin_src bash :dir /ssh:hype:/
hostname
echo $PATH
mmlsfs -h
#+end_src
#+RESULTS[a59792ebf5e54f55012f1ab191bf160eaa927ed5]:
#+begin_example
hype
/usr/lpp/mmfs/bin/:/usr/bin
Usage:
mmlsfs {Device | all | all_local | all_remote} [-A] [-B] [-d] [-D]
...
#+end_example
And for a single machine this works well. But I would like to set the same PATH
for a couple of hundred machines. That or have Tramp inherit PATH
from the machine it lands on.
I have tried to grok the code for the subst
connection-local-get-profiles
in files-x.el
but have yet to understand if it does anything but literal equality checks.
Hypothethical example
If, for example, regexes were accepted and matched the following criteria would match both machines named n1 and n500.
(connection-local-set-profiles
'(:application tramp :machine "n[:digit:]+") 'remote-path-with-gpfs)
This would result in the following code block evaluating like it did on hype.
#+begin_src bash :dir /ssh:hype|su:root@hype|ssh:n1:/
hostname
echo $PATH
mmlsfs
#+end_src
#+RESULTS[c8d522bc1e3da7031ae726e4a987a3b3f441f771]:
: n1
: /usr/bin:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
: bash: line 4: mmlsfs: command not found
Question
Is it possible to match multiple machines with a criteria. Or is it possible to have Tramp inherit PATH
from the machine it lands on.
I could iterate over a generated list of all the machines I want to match and add one rule per machine. But that would mean Emacs having to evaluate all hundred criteria per connection it ever sets up, which seems less than ideal.