터미널에서 작동하는 두 가지 명령이 있습니다.
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;
}