On Thu, Dec 28, 2017 at 07:07:57PM +0300, Oleg A. Mamontov wrote: > Hello, > > On Tue, Dec 26, 2017 at 03:23:50PM +0000, Arkadiusz Drabczyk wrote: > > On Tue, Dec 26, 2017 at 06:36:20AM +0800, Yubin Ruan wrote: > > > Hi, > > > > > > I have a folder hook like this: > > > > > > folder-hook =somembox 'push "!touch /tmp/\1-touched\n"' > > > > > > where I would like to create a file "/tmp/somebox-touched" when I select > > > and > > > enter a mailbox. As you can see, \1 here should represent the name of the > > > mbox > > > (as in many Regex). Is there a way to do this so that I do not have to > > > write > > > rules for all the mbox one by one? > > > > Like that: > > > > folder-hook . 'set my_oldrecord=$record; set record=^; set > > my_folder=$record; set record=$my_oldrecord' > > folder-hook . 'push "!touch /tmp/${my_folder}-touched\n"' > > Thanks for sharing such an interesting approach. How can it be extended to > remove the '=' starting character? I've tried to do following: > > folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=`echo > $record | sed s/=//`; set record=$my_oldrecord' > > But unfortunately it doesn't work for some reason.
The best I could come up with: folder-hook . 'set my_oldrecord=$record; set record=^; set my_folder=$record; set record=$my_oldrecord' folder-hook . 'push "!touch /tmp/$(echo ${my_folder} | sed 's,^=,,)-touched\n"' The reason the solution you tried doesn't work is probably because mutt performs shell substitution before parsing the line as said in the manual: "It is also possible to substitute the output of a Unix command in an initialization file. This is accomplished by enclosing the command in backticks (``). In Example 3.5, "Using external command's output in configuration files", the output of the Unix command "uname -a" will be substituted before the line is parsed." So what shell sees is: $ echo | sed s/=// -- Arkadiusz Drabczyk <arkadi...@drabczyk.org>