Ich habe ein Bash-Skript, das ein Programm ausführt, das Dateien generiert (im aktuellen Verzeichnis, aus dem es ausgeführt wurde). Anschließend sucht das Bash-Skript nach diesen Dateien und sucht nach ihrer Größe.
Wenn ich dieses Skript vom Terminal aus ausführe, funktioniert alles reibungslos, die Dateien werden erstellt, gefunden und gemeldet.
Das Problem besteht darin, dass dies benutzerfreundlich sein soll und zum Ausführen angeklickt werden muss. Das Skript wird ausgeführt, wenn darauf geklickt wird, die Dateien scheinen jedoch nicht generiert zu werden (vielleicht sind sie woanders?), und daher schlägt der Bericht fehl, da die Dateien nicht gefunden werden.
In diesem Skript führe ich vor dem Aufruf des Programms ein cd ~/Pfad/zu/Speicherort aus.
#!/usr/bin/env bash
cd ~/path/to/location
./someprogram
if [ touch output.txt ]; then
echo "FILE EXISTS"
fi
Antwort1
Es stellte sich heraus, dass meine Umgebung nicht vollständig mit dem SHEBANG kopiert wurde
#!usr/bin/env bash
Durch einfaches Definieren und Exportieren der fehlenden Umgebungsvariablen im Skript funktionierte das Skript einwandfrei.
export ENV_VARIABLE_NAME=environment_variable_data
Muss daran gelegen haben, dass die Variable in der Bash-Umgebung nicht definiert war (vielleicht cshrc oder so).
Antwort2
Entschuldigen Sie, mein Ruf erlaubt es mir anscheinend nicht, einen Kommentar abzugeben, obwohl dies angemessener gewesen wäre, da ich Sie bitte, zuerst etwas zu überprüfen.
Wie dem auch sei, meine Frage lautet: Verwenden Sie für die Konsole und die GUI denselben Benutzernamen?
Sie könnten bei der Verwendung der Konsole als Root angemeldet gewesen sein, während Ihre GUI unter einem anderen Benutzernamen angemeldet wäre, der möglicherweise nicht die erforderlichen Rechte für den Ordner hat, in den Sie versuchen, die Dateien zu schreiben?
Anschließend sollten Sie sicherstellen, dass Sie dem GUI-Benutzer die erforderlichen Rechte erteilt haben (z. B. indem Sie das Benutzerkonto einer entsprechenden Gruppe hinzufügen).
Dies ist wahrscheinlich der häufigste Grund dafür, dass Dateien bei der Verwendung von Linux nicht dort geschrieben werden, wo Sie sie erwarten.