2017-02-15 10 views
0

Ich bin die rollende Version von Kali Linux laufen, und habe begonnen, ein Skript zu schreiben, das von rc.local beim Booten ausgeführt wird, die der Benutzer die Aktualisierung ermöglichen wird Hostname des Computers.Kann rc.local warten auf Bash-Skript vor dem Booten zu beenden

rc.local:

#!/bin/sh -e 
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error. 
# 
# In order to enable or disable this script just change the execution 
# bits. 
# 
# By default this script does nothing. 

/root/hostnameBoot 

exit 0 

hostnameBoot Script:

#!/bin/bash 
# /etc/init.d/hostnameBoot 

# Solution Added 
exec < /dev/tty0 

echo "Enter desired hostname:" 
read hostname 
echo "New hostname: $hostname" 

#exit 0 

Wie Sie sehen können, die derzeit hostnameBoot den Benutzer auffordert, einen neuen Host-Namen einzugeben, und gibt dann den Hostnamen für den Benutzer.

Nach dem Start führt rc.local das Skript aus, fordert den Benutzer jedoch nicht auf, einen neuen Hostnamen einzugeben.

Probe Boot-Ausgang:

- misc boot info - 
Enter desired hostname: 
New hostname: 

Die Sample-Boot-Ausgabe zeigt alle auf einmal und ist nicht der Benutzer einen neuen Hostnamen eingeben. Sobald die Zeilen angezeigt werden, fährt das System mit dem Anmeldebildschirm fort. Gewünschtes Verhalten des Systems würde dem Benutzer Zeit geben, einen neuen Hostnamen einzugeben, und dann die zuvor übermittelte Eingabe präsentieren.

Hinweis: Das Skript ist nicht das Endprodukt, es war nur ein Beweis des Konzepts mit rc.local, um das Skript auszulösen.

+0

Dies ist wahrscheinlich besser für [unix.se] geeignet. –

Antwort

0

Boot-Skripte, einschließlich rc.local, werden normalerweise nicht im interaktiven Modus ausgeführt (d. H. Mit einem voll funktionsfähigen Terminal, an dem der Benutzer Daten eingeben kann). Ihre Ausgabe wird auf die Konsole umgeleitet (so dass Sie die Boot-Meldungen sehen können), aber die Eingabe ist höchstwahrscheinlich /dev/null (so read kehrt sofort mit nichts zu lesen).

Sie müssen den Lesevorgang entweder manuell umleiten, um ständig ein festes Terminal zu verwenden (z. B. read </dev/tty0) oder eine virtuelle Konsole öffnen, um die Benutzereingabe auszuführen (z. B. openvt -s -w /root/hostnameBoot). Weitere Informationen finden Sie unter this answer.

+0

Vielen Dank für die Erklärung, was während des Bootens vor sich geht. Es hilft, das System ein wenig mehr zu verstehen. Lösung: exec Yegnaro

Verwandte Themen