¿Cómo cafeinar una función en la CLI?

0

La herramienta caffeinate de Mac acepta el nombre de una utilidad: caffeinate sleep 1 , por ejemplo. ¿Hay alguna forma de que acepte una función también? Por ejemplo:

function mysleep {
  sleep 2
}

caffeinate mysleep    # mysleep: No such file or directory
    
pregunta Daniel Li 02.06.2017 - 00:58

3 respuestas

1

Según la página de manual :

caffeinate -- prevent the system from sleeping on behalf of a utility

Una función no es una utilidad, ya que una utilidad tendrá un ID de proceso (pid) asociado. Cuando especifica una utilidad, caffeinate calcula un proceso y mantiene una aserción que impide que el modo de espera se complete hasta que se complete ese proceso.

    
respondido por el Allan 02.06.2017 - 02:30
1

caffeinate lanza ejecutables. Sin embargo, las funciones de shell solo existen dentro de la shell. Las funciones de shell no son ejecutables.

Solución alternativa: llame a bash directamente

Esto funciona mejor para comandos de una línea y simples.

caffeinate bash -c 'sleep 2'

Los multilínea también funcionan:

caffeinate bash <<EOF
  sleep 2
  echo "done :D"
EOF

Solución alternativa: llame a un script en lugar de a una función

En lugar de hacer su trabajo dentro de una función, divídalo en un script separado:

caffeinate mysleep.sh
#!/bin/bash
# mysleep.sh
sleep 2
    
respondido por el bennettp123 02.06.2017 - 07:20
0

caffeinate requiere que haya un objeto para ejecutar, una función no cumple este requisito.

Cambie su función en un script de shell y funcionará bien. Así que para su ejemplo:

'#!/bin/bash 
sleep 2

guardado en un archivo llamado mysleep y luego caffeinate mysleep funcionará bien (siempre que el archivo mysleep esté en la ruta de su sistema).

'

    
respondido por el Tony Williams 02.06.2017 - 07:14

Lea otras preguntas en las etiquetas