Ho usato per un po 'lo shebang #!
e oggi ho trovato un caso d'uso che mi confonde.Shebang "#!" inizia e "! #" termina?
Ci sono diversi modi per eseguire lo script Scala come
#!/usr/bin/env scala
println("hello world")
Tuttavia, mi sono imbattuto in questa versione di shebang
#!/bin/sh
exec scala "$0" "[email protected]"
!#
println("hello world")
Sembra che questa soluzione richiama fondamentalmente la bash prima, la corsa exec scala "$0" "[email protected]"
dove $0
indica il nome file corrente e [email protected]
è argomenti di input in una matrice posizionale.
la mia domanda è vuol dire tutto tra #!
e !#
potrebbe essere eseguita in bash,
#!/bin/sh
exec scala "$0" "[email protected]"
echo "oh Yeah"
!#
println("hello world")
Non ha errore fuori ma nessuno mi ha dato la "Oh Yeah" in stdout, qualcuno può spiegare a me cosa sta succedendo qui?
aggiornamento: dopo aver realizzato !#
è una cosa Scala, ho scaricato il codice sorgente di Scala e ho capito che appare solo nel commento di ScriptRunner.scala parte scritta da Lex Spoon.
'exec' sostituisce il processo corrente con il nuovo processo. Niente dopo che corre. –
@EtanReisner, allora come sa che il nuovo interprete (scala interpreter) in questo caso sa che dovrebbe iniziare da 'println()' e non da 'echo', è quello dove viene usato'! # '? –
In altre parole, potresti essere in grado di visualizzare l'echo se posto prima di 'exec'.Perl documenta alcune notazioni correlate in ['perldoc perlrun'] (http://perldoc.perl.org/perlrun.html). –