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:
Gato:
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, more
aparece 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;
}