32157


zsh（5。2）を使っています。  
そこで`less` (`/usr/bin/less` less458) を使うと、どうやら  
`~/.zshenv`をよむようです。

そしてたとえば`~/.zshenv`に`echo hi`のようにあると  
`less hogehoge.txt`  
をおこなうと`hogehoge.txt`の中身に関わらず  
hiが表示されるだけになります。

何がおかしいのでしょうか？

less はMANPAGERにしてあります。


CC BY-SA 3.0
2017-01-25T08:07:23.070
32147
2017-01-25T13:35:41.950
10768
question
zsh
lessをつかったとき.zshenvをよみにいきますか？


`less` のソースコードを眺めてみますと、`LESSOPEN` に指定されたコマンドを

[code]

    $SHELL -c cmd
    
[/code]

として実行しています。

**less-481/filename.c**

[code]

    public char *
    open_altfile(filename, pf, pfd)
           :
    {
           :
      if ((lessopen = lgetenv("LESSOPEN")) == NULL)
        return (NULL);
      while (*lessopen == '|')
      {
        /*
         * If LESSOPEN starts with a |, it indicates 
         * a "pipe preprocessor".
         */
    
            :
      len = (int) (strlen(lessopen) + strlen(filename) + 2);
      cmd = (char *) ecalloc(len, sizeof(char));
      SNPRINTF1(cmd, len, lessopen, filename);
      fd = shellcmd(cmd);
    
            :
    
    static FILE *shellcmd(cmd)
      char *cmd;
    {
            :
      shell = lgetenv("SHELL");
      if (shell != NULL && *shell != '\0')
      {
                 :
        /*
         * Read the output of <$SHELL -c cmd>.  
         * Escape any metacharacters in the command.
         */
        esccmd = shell_quote(cmd);
        if (esccmd == NULL)
        {
          fd = popen(cmd, "r");
        } else
                 :
    
[/code]

なので、例えば、

[code]

    zsh% SHELL=/bin/bash less filename
    
[/code]

などとすると `~/.zshenv` を読み込まなくなります。


CC BY-SA 3.0
2017-01-25T13:35:41.950
32157
2017-01-25T13:35:41.950
32147
answer