Come caffeinate una funzione su CLI?

0

Lo strumento caffeinate di Mac accetta il nome di un'utilità: caffeinate sleep 1 , ad esempio. Esiste un modo per accettare anche una funzione? Ad esempio:

function mysleep {
  sleep 2
}

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

3 risposte

1

Per la pagina man :

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

Una funzione non è un'utilità in quanto a un'utilità verrà associato un ID di processo (pid). Quando si specifica un'utilità, caffeinate interrompe un processo e contiene un'asserzione che impedisce la sospensione fino al completamento di tale processo.

    
risposta data 02.06.2017 - 02:30
fonte
1

caffeinate avvia i file eseguibili. Tuttavia, le funzioni di shell esistono solo all'interno della shell. Le funzioni della shell non sono eseguibili.

Soluzione temporanea: chiama direttamente bash

Funziona meglio per one-liner e semplici comandi.

caffeinate bash -c 'sleep 2'

Anche le multi-liners funzionano:

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

Soluzione temporanea: chiama uno script anziché una funzione

Invece di svolgere il tuo lavoro all'interno di una funzione, suddividila in uno script separato:

caffeinate mysleep.sh
#!/bin/bash
# mysleep.sh
sleep 2
    
risposta data 02.06.2017 - 07:20
fonte
0

caffeinate richiede che ci sia un oggetto da eseguire, una funzione non soddisfa questo requisito.

Cambia la tua funzione in uno script di shell e funzionerà correttamente. Quindi per il tuo esempio:

'#!/bin/bash 
sleep 2

salvato in un file chiamato mysleep e quindi caffeinate mysleep funzionerà correttamente (a condizione che il file mysleep si trovi nel tuo PATH di sistema.)

'

    
risposta data 02.06.2017 - 07:14
fonte

Leggi altre domande sui tag