¿Por qué el comando more no funciona cuando está vinculado a un método abreviado de teclado?

¿Por qué el comando more no funciona cuando está vinculado a un método abreviado de teclado?

Tengo dos comandos que funcionan en la terminal:

notify-send "$(more /home/tim/autest.sh | head -1)"

y

notify-send "$(cat /home/tim/autest.sh | head -1)"

poniéndolos en un script como este:

#! /bin/bash

notify-send "$(more /home/tim/autest.sh | head -1)"

notify-send "$(cat /home/tim/autest.sh | head -1)"

todavía da dos resultados, pero solo uno es el resultado correcto real:

Más:

ingrese la descripción de la imagen aquí

Gato:

ingrese la descripción de la imagen aquí

Cuando ejecuto desde la terminal, ambos muestran la salida correcta. ¿Por qué es esto? ¿Por qué more no da el resultado correcto cuando se activa desde un atajo de teclado?

Tenga en cuenta que esto no es un problema con notify-send, hace lo mismo cuando se repite en un archivo de registro:

#! /bin/bash

echo $(more /home/tim/autest.sh | head -1) > log1.txt

echo $(cat /home/tim/autest.sh | head -1) > log2.txt

Registro 1:

::::::::::::::

Registro 2:

#! /bin/bash

Respuesta1

Utilice este comando:

notify-send "$(more /home/tim/autest.sh | head -4 | tail -1)"

Cuando usas tu script con un atajo, moreaparece esto:

::::::::::::::
/home/tim/autest.sh
::::::::::::::
#! /bin/bash

Aquí hay un extracto del código fuente demore.c

while (fnum < nfiles) {
  if ((f = checkf (fnames[fnum], &clearit)) != NULL) {
      context.line = context.chrctr = 0;
      Currline = 0;
      if (firstf) sigsetjmp (restore, 1);
      if (firstf) {
        firstf = 0;
        if (srchopt) {
            search (initbuf, f, 1);
            if (noscroll)
              left--;
        }
        else if (initopt)
            skiplns (initline, f);
      }
      else if (fnum < nfiles && !no_tty) {
        sigsetjmp (restore, 1);
        left = command (fnames[fnum], f);
      }
      if (left != 0) {
        if ((noscroll || clearit) && (file_size != LONG_MAX)) {
            if (clreol)
              home ();
            else
              doclear ();
        }
        if (prnames) {
            if (bad_so)
              erasep (0);
            if (clreol)
              cleareol ();
            putsout("::::::::::::::");
            if (promptlen > 14)
              erasep (14);
            putchar('\n');
            if(clreol) cleareol();
            puts(fnames[fnum]);
            if(clreol) cleareol();
            puts("::::::::::::::");
            if (left > Lpp - 4)
              left = Lpp - 4;
        }
        if (no_tty)
            copy_file (f);
        else {
            within++;
            screen(f, left);
            within = 0;
        }
      }
      sigsetjmp (restore, 1);
      fflush(stdout);
      fclose(f);
      screen_start.line = screen_start.chrctr = 0L;
      context.line = context.chrctr = 0L;
  }
  fnum++;
  firstf = 0;
}

información relacionada