Hi,<br><br>I am trying to mimic mapM() at shell command line. I define the interface as &quot;mapm cmd2 cmd1,&quot; so cmd2 will be run for each of the cmd1 results. &quot;$_&quot; can be used inside cmd2 to represent the current cmd1 result.<br>

<br>For example, the command<br>        mapm    &#39;cp -pr $_ destination_dir/$_&#39;    ls<br>copies everything under the current directory to the destination directory.<br><br>The code is as follows:<br><br>--<br>module Main where<br>

<br>import System.Environment ( getArgs )<br>import System.Exit<br>import System.IO<br>import System.Process<br>import Text.Regex<br>import Text.Regex.Posix<br><br>main = do<br>    hs_argv &lt;- getArgs<br>    if length hs_argv /= 2<br>

      then<br>        putStrLn &quot;wrong arguments!&quot; &gt;&gt; exitFailure<br>      else do<br>        let [cmd2, cmd1] = hs_argv<br>        (_, hOut, hErr, _) &lt;- runInteractiveCommand cmd1<br>        err &lt;- hGetContents hErr<br>

        hClose hErr<br>        if null err<br>          then do<br>            out &lt;- hGetContents hOut<br>            mapM (f cmd2) (lines out)<br>          else<br>            putStr err &gt;&gt; exitFailure<br><br>
f :: String -&gt; String -&gt; IO ExitCode<br>
f cmd2 item = system cmd2&#39;<br>  where cmd2&#39; = if cmd2 =~ &quot;\\$\\_&quot;::Bool<br>                then subRegex (mkRegex &quot;\\$\\_&quot;) cmd2 item<br>                else cmd2<br>--<br><br>
It works, except one issue that is bothering me.<br><br>If I issue <br>
        mapm    &#39;lt $_&#39;    ls,<br>I get a bunch of <br>        /bin/sh: lt: command not found,<br>while I expect it act the same as<br>
        mapm    &#39;ls -Alrt --color=auto $_&#39;    ls,<br>
because &quot;lt&quot; is aliased to &quot;ls -Alrt --color=auto.&quot;<br><br>Notice &quot;/bin/sh&quot; above. My shell is actually tcsh. All the aliases are in ~/.cshrc.<br><br>I tried replacing &quot;system cmd2&#39;&quot; with<br>

        system (&quot;source ~/.cshrc; &quot; ++ cmd2&#39;)<br>    and<br>        system (&quot;tcsh -c &quot; ++ &quot;&#39;source ~/.cshrc; &quot; ++ cmd2&#39; ++ &quot;&#39;&quot;),<br>but they did not solve the problem.<br>

<br>Can someone please help me?<br><br>Thanks,<br><br>Hong<br>