키보드 단축키에 바인딩하면 more 명령이 작동하지 않는 이유는 무엇입니까?

키보드 단축키에 바인딩하면 more 명령이 작동하지 않는 이유는 무엇입니까?

터미널에서 작동하는 두 가지 명령이 있습니다.

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

그리고

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

다음과 같은 스크립트에 넣습니다.

#! /bin/bash

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

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

여전히 두 개의 출력을 제공하지만 실제 올바른 출력은 하나만 제공됩니다.

더:

여기에 이미지 설명을 입력하세요

고양이:

여기에 이미지 설명을 입력하세요

터미널에서 실행하면 둘 다 올바른 출력을 표시합니다. 왜 이런거야? 키보드 단축키로 트리거할 때 more가 올바른 출력을 제공하지 않는 이유는 무엇입니까?

이는 의 문제가 아니며 notify-send로그 파일에 에코할 때 동일한 작업을 수행합니다.

#! /bin/bash

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

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

로그1:

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

로그2:

#! /bin/bash

답변1

다음 명령을 사용하십시오.

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

바로가기와 함께 스크립트를 사용하면 more다음이 제공됩니다.

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

다음은 소스 코드에서 발췌한 내용입니다.more.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;
}

관련 정보