Ich muss ein Bash-Skript erstellen, um ein Laufwerk zu erstellen und bereitzustellen. Also zwei einfache Befehle. Beide "funktionieren", wenn sie über die Befehlszeile eingegeben werden.
Das Skript wird jedes Mal erstellt und ausgeführt, wenn sich ein normaler Benutzer anmeldet. Daher benötige ich eine Methode, um dieses Skript zu diesem Zeitpunkt ausführbar zu machen. Bisher kann ich das nicht zum Laufen bringen. Zum Beispiel wird der erste Teil mkdir /vvv/gggg
nicht fortgesetzt, da das Skript nicht ausführbar ist (ich vermute).
Hoffe das macht Sinn. Ist das möglich? Alle Gedanken darüber, wie diese Arbeit gemacht werden soll, werden geschätzt.
Update :
Vielen Dank für Ihre Antworten. Ich sollte wahrscheinlich einige zusätzliche Informationen hinzufügen, außer dass ich neu in Linux bin.
Ich verwende eine virtuelle Open Source-Desktopanwendung namens Ulteo. Diese App läuft auf Ubuntu und hat sehr wenig Unterstützung - deshalb bin ich hier. Grundsätzlich lerne ich durch Feuer.
Die Anwendung verfügt also über eine Anmeldeskriptverwaltungsfunktion, mit der ich ein Skript an einen Benutzer binden kann. Ein einfaches Windows-Skript mit Netznutzung funktioniert einwandfrei. Wenn ich jedoch versuche, ein Linux-Bash-Skript anzuwenden, passiert nichts.
Ich denke, weil ich zuerst ein chmod +x
gegen das Skript ausführen muss , um das Skript ausführbar zu machen, schlägt es deshalb fehl. Ulteo rennt übrigens in einem Chroot-Gefängnis. Ich habe ein Skript erstellt, es gespeichert und konnte das Skript nicht finden. Ich suchte sowohl innerhalb als auch außerhalb des Chroot-Gefängnisses.
Ich mag den Ansatz von dan08, dass das anfängliche Skript auf ein anderes Skript verweist, das ich finden und manuell ausführbar machen kann. Würde ich auf das gleiche Problem stoßen?
Klären diese zusätzlichen Informationen die Situation? Danke im Voraus.
Fotos beigefügt.
! [Login-Scipt-Verwaltungskonsole] [1]
! [Windows-Skripte, die funktionieren] [2]
! [einfaches Linux-Skript, das nicht funktioniert] [3]
Entschuldigung, ich kann noch keine Bilder posten
quelle
ls -l scriptname
. Sie sollten auch klären, wie genau das Skript erstellt wird und warum Sie es nicht nur einmal erstellen und in Ruhe lassen. Schließlich sollte Ihr normaler Benutzer keinen Schreibzugriff haben/var
und daher dort keine Verzeichnisse erstellen können.Antworten:
Es gibt zwei Dinge, die Sie tun müssen:
Verweisen Sie auf den Skriptinterpreter am Anfang des Skripts:
Legen Sie die Berechtigungen fest, um es ausführbar zu machen:
quelle
Anstatt Ihr Skript ausführbar zu machen, können Sie einen anderen Ansatz wählen und die Art und Weise ändern, wie Sie das Skript aufrufen.
script.sh
reicht aus, um ein ausführbares Skript auszuführen.jedoch
Es ist möglich, ein nicht ausführbares Skript auszuführen, wenn Sie das Programm angeben, zu dem es ausgeführt werden soll.
Also
/bin/bash script.sh
oderbash script.sh
oderpython script.py
werden alle nicht ausführbare Skripte ausführen.Mein Vorschlag wäre also, die Art und Weise, wie das Skript aufgerufen wird, zu bearbeiten und die Binärdatei anzugeben, mit der es ausgeführt wird.
quelle
os.execv(__file__, sys.argv)
würde Python nicht funktionieren, und es gibt sicher mehr solche Situationen. Wenn Sicherheit ein Ziel ist, verwenden Sie es einfach von root / sudo aus, damit Benutzer Binärdateien ausführen können. Wenn das Ziel die Sicherheit ist, möchten Sie nicht, dass sie Skripte ausführen können, da Sie dem System sowieso Schaden zufügen können ... ausführbar oder nicht. Ich verstehe also nicht, warum es wichtig ist, sie nicht ausführbar zu machen.Erstellen Sie ein Programm in C, C ++ oder Python usw. und verwenden Sie den Systembefehl, um das Bash-Skript auszuführen.
Zum Beispiel würde ein C-Programm folgendermaßen aussehen:
Um das Programm beim Start auszuführen, fügen Sie es der Liste der Startprogramme hinzu. Öffnen Sie die Startanwendungen in Ihrem Dash und fügen Sie die kompilierte ausführbare Datei zur Liste hinzu, indem Sie auf die Schaltfläche Hinzufügen klicken.
quelle
bash path/yourbashscript.sh
.bash path/yourbashscript.sh
direkt ausgeführt werden, anstatt dieses C-Programm zu kompilieren und auszuführen ?Sie können Ihr Bash-Skript ausführbar machen, indem Sie Folgendes in der Befehlszeile ausführen.
Wenn Sie es dann beim Start ausführen, können Sie es zu Ihrer Liste der Startprogramme hinzufügen, wie @akabhirav sagte.
quelle
SHC ist ein generischer Shell-Skript-Compiler. Es benötigt ein Skript, das in der Befehlszeile angegeben ist und C-Quellcode erzeugt. Der generierte Quellcode wird dann kompiliert und verknüpft, um eine gestrippte Binärdatei zu erzeugen.
Die kompilierte Binärdatei hängt weiterhin von der in der ersten Zeile des Shell-Codes angegebenen Shell ab (der Shebang:
#!/bin/sh
oder so), sodass SHC keine vollständig unabhängigen Binärdateien erstellt.SHC selbst ist kein Compiler wie
cc
. Codiert und verschlüsselt vielmehr ein Shell-Skript und generiert C-Quellcode mit der zusätzlichen Ablauffunktion. Anschließend wird der System-Compiler verwendet, um eine abgespeckte Binärdatei zu kompilieren, die sich genau wie das ursprüngliche Skript verhält. Bei der Ausführung entschlüsselt die kompilierte Binärdatei den Code und führt ihn mit der-c
Option der Shell aus .quelle
#!
und hinzuzufügenchmod +x
?