Wie einen Dateinamen als Befehlszeile im Terminal anzeigen?


24.04.2024, 16:09

Ich möchte nicht den "Inhalt" der Datei ausgeben lassen, z.B. über less oder cat. Es soll nur die Zeile " '/home/user/tool1/tool1.py' add " eingefügt und angezeigt werden im Terminal. Das ich dann nach "add" weiter schreiben kann.

Luffy123777  24.04.2024, 15:46

Wieso nutzt du nicht einfach cat und führst es dann aus?

vefan 
Beitragsersteller
 24.04.2024, 15:55

Ich hab mich bisher noch nicht mit cat beschäftigt.

Beim suchen hab ich eben das gefunden:

cat ./path/to/file.txt
Da müsste ich jedes mal händisch die Befehlszeile eingeben?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

warum willst du das mit einem Alias machen?

Schreibe den Befehl doch einfach in einen Datei. Der Name könnte doch so lauten wie der angedachte Alias-Name.

Im Script kannst du doch alles Mögliche auf den Bildschirm bringen.

Dem Script übergibst du das was du "add" nennst einfach als Parameter.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

vefan 
Beitragsersteller
 26.04.2024, 17:37

Danke

Da müsste ich mal sehen wie das funktioniert, da ich bis jetzt noch kein Script erstellt hab. Wie gesagt die Datei soll nicht ausgeführt werden, sondern nur die (unvollständige) Befehlszeile nach dem Prompt eingefügt werden, dass ich sie händisch fertigstelle und enter drücke.

guenterhalt  26.04.2024, 17:39
@vefan

werde mal einen Entwurf machen. Vielleicht noch am Abend.

guenterhalt  26.04.2024, 20:10
@guenterhalt

erst mal was ganz Einfaches

Als Kommando hier einfach ls
In der Kommandozeile könnte das ls *.jpg lauten. Du möchtest aber *.jpg eingeben.

die Datei nenne ich test.sh
Schreibe die Zeilen in diese Datei, mache sie mit chmod 777 test.sh ausführbar für "alle"

#!/bin/bash
echo "gibt jetzt was ein:"
read einvariablenName
ls $einvariablenName
echo "<<<<ENDE>>>>"

#### Erklärung:

#!/bin/bash sagt, dass die Datei ein Shell-Sript der bash ist

echo "gibt jetzt was ein:" sagt, Ausgabe auf den Monitor dieses Textes

read einvariablenName ließt eine Zeichenkette bis zum <Enter> und schreibt die getippten Zeichen in die Variable "einvariablenName"
ls $einvariablenName
führt den Befehl ls mit dem Inhalt der Variablen einvariablenName aus.
Das $ vor einvariablenName sagt, "nimm deren Inhalt"

Das Ergebnis wird dann durch ls ausgegeben. Zum Schluss wird noch <<<<ENDE>>>> ausgegeben.

Für einvariablenName kann natürlich a oder b oder ... benutzt werden. Bedenke, man muss auch noch nach Jahren so ein Script lesen können.

Viel Erfolg, frage weiter, wenn es notwendig ist!

vefan 
Beitragsersteller
 27.04.2024, 15:06
@guenterhalt

Vielen Dank für das Script und die Mühe :-)

Leider funktioniert es (noch) nicht.

Ich hab es ausführbar gemacht, es öffnet sich aber nur im Text Editor.

Wenn ich es ins Terminal ziehe und Enter drücke kommt die Abfrage "gibt jetzt was ein:".

Wenn ich eingebe '/home/user/tool1/tool1.py' add kommt die Meldung:

ls: Zugriff auf "/home/user/tool1/tool1.py" nicht möglich: Datei oder Verzeichnis nicht gefunden

 add

<<<<ENDE>>>>

Wenn ich im Script "gibt jetzt was ein:" mit " '/home/user/tool1/tool1.py' add " ersetze und bei read und ls "x" eingebe, erscheint: ls:

Zugriff auf '$' nicht möglich: Datei oder Verzeichnis nicht gefunden

ls: Zugriff auf 'x' nicht möglich: Datei oder Verzeichnis nicht gefunden

#!/bin/bash

echo "/home/user/tool1/tool1.py"

read x

ls $ x

echo "<<<<ENDE>>>>"

Demnach versucht das Script auf das was ich eingebe zuzugreifen (Verzeichnis), was es aber nicht soll.

Es soll nur die Zeile" '/home/user/tool1/tool1.py' " im Terminal anzeigen nach dem Prompt zum weiterbearbeiten.

Deshalb wollte ich es über einen Alias machen:

Ich gebe "x" im Terminal ein und dann erscheint nach einem neuen Prompt: '/home/user/tool1/tool1.py' (genauso Zeichen für Zeichen) und ich ergänze dann noch den Befehl händisch mit z.B. del xyz123 und führe es per Enter drücken aus ($'/home/user/tool1/tool1.py' del xyz123 -> Enter)

Der alias x='echo /home/user/tool1/tool1.py' wäre im Prinzip perfekt, wenn es nicht gleich nach der Anzeige im Terminal sofort zum nächsten Prompt springen würde und ich die Zeile somit händisch nicht ergänzen und ausführen kann.

guenterhalt  27.04.2024, 16:54
@vefan
es öffnet sich aber nur im Text Editor

o.k. du klickst den Dateinamen bestimmt in einem Windowmanager (Nautilus oder Dolphin oder Thunar ... ) an. Der erkennt das .sh und lädt die Datei in einen Texteditor. Das machen Window-Manger so.

Als Script kannst du es erst einmal nur in einem Terminal starten.

Mehr als ls ausführen kann das Script aber nicht. Wenn du
/home/user/tool1/tool1.py starten willst und zusätzlich einen Parameter per Eingabe hinzufügen willst, dann musst du das Script anpassen.

statt
echo "gibt jetzt was ein:"

dann eben:

echo -en  "tool1.py  erwartet eine Eingabe\nbitte jetzt hier eingeben:  " 

das -en bewirkt, dass das \n als Zeilenumbruch gewertet wird und die Eingabe gleich nach dem : erfolgt (ohne Zeilenumbruch hinter eingeben:

Wenn du als Befehl /home/user/tool1/tool1.py ausführen lassen willst, dann muss im Script statt ls genau /home/user/tool1/tool1.py stehen.

Wenn du mal mehr Erfahrung hast, dann schreibe eine Zeile hinter #!/bin/bash

cmd1=/home/user/tool1/tool1.py

und dort wo in meinem Script ls steht

$cmd1 $einvariablenName

$cmd1 wird dann durch /home/user/tool1/tool1.py ersetzt und ausgeführt.

--------------------

Solltest du so etwas auch mit einer grafischen Oberfläche haben wollen, das geht genauso leicht mit tclsh als Shell (eben nicht die bash) und tk für grafische Elemente.

Auch da kann ich dir Ratschläge geben.

vefan 
Beitragsersteller
 27.04.2024, 18:23
@guenterhalt

Leider funktioniert es nicht. Egal wie nach deiner Anleitung, das script will die Zeile immer "ausführen". Die Zeile soll einfach nur "eingefügt" werden nach dem Prompt zum weiter bearbeiten. Nichts weiter.

Aber ich hab eine andere Lösung gefunden: Im xfce4-terminal kann man in den Einstellungen als "Rechtsklickaction" "Auswahl einfügen" einstellen.

Nun wird alles was ich in Linux Mint markiere über Rechtsklick nach dem Prompt eingefügt und ich kann mit start/stop/add/del/list usw ergänzen und abschließen.

Im Prinzip dasselbe wie die Datei mit der Maus ins Terminal ziehen und zu ergänzen...

Schade das man im Terminal keine Datei mounten kann (cd /home/user/tool1/tool1.py) damit sie am Prompt geöffnet bleibt für Befehlseingaben.

Danke nochmal und ein schönes Rest-Wochenende

vefan 
Beitragsersteller
 28.04.2024, 15:35
@guenterhalt

Endlich am Ziel angekommen Dank Deinem Script :-)

Lösung:

#!/bin/bash

echo -en "tool1.py erwartet eine Eingabe\nbitte jetzt hier eingeben: "

read einvariablenName

/home/user/tool1/tool1.py $einvariablenName

echo "<<<<ENDE>>>>"

Das Script als Alias in .bash_aliases:

alias x='cd /home/user/tool1 && bash /home/user/tool1/test.sh'

Nun erscheint nach eingabe von "x" die Abfrage und wird nach Eingabe + Enter ausgeführt. Perfekt

Danke und LG Vefan

guenterhalt  28.04.2024, 16:19
@vefan
'cd /home/user/tool1 && bash /home/user/tool1/test.sh'

das kannst du auch anders machen:

Schreibe in die Datei test.sh

hinter

#!/bin/bash
cd /home/user/tool1

dann brauchst du auch nur

./tool1.py $einvariablenName

schreiben, um tool1.py zu starten, denn ./ ist das Verzeichnis /home/user/tool1

Also eigentlich hast du zumindest in Bash ja die Möglichkeit, im Bash-Skript per $1, $2 Optionen mitzunehmen:

https://bash.cyberciti.biz/guide/$1

Wie man die in eine python-Datei rein fummelt weiß ich nicht.

Dann kannst du als Alias den Befehl via

$ befehl INPUT

überall aufrufen...


vefan 
Beitragsersteller
 24.04.2024, 18:00

Mit py hat das eigentlich nix zu tun. Es geht nur darum das der Dateiname inkl. Pfadangabe über Alias-Befehl im Terminal dargestellt wird und ich hintendran noch Befehle einfüge wie add / start / stop usw. Als hätte ich es per Hand ins Terminal geschrieben. Bräuchte halt den ensprechenden Alias-Befehl, dass es genauso ausgeführt wird ;-)

julihan41  24.04.2024, 18:42
@vefan

Verstehe ich nicht, was dein Problem ist.

Alles nach dem Alias wird eigentlich an den Alias weiter gereicht. 🤷‍♂️ Bspw könntest du

alias apti=aptitude

Setzen. Machst du dann

apti update

wird aptitude mit der Option update aufgerufen. Bei dir also

alias XYZ='/home/user/tool1/tool1.py'

Da brauchst du keine Darstellung oder sonst was... Vorausgesetzt das environment stimmt und die Datei ist ausführbar.

vefan 
Beitragsersteller
 26.04.2024, 17:22
@julihan41

Danke

Wenn ich dein Beispiel ausführe wird die Datei tool1.py ausgeführt und mir werden die Datei-Befehle aufgelistet. Die Datei soll aber NICHT ausgeführt werden, sondern einfach nur die (unvollständige) Befehlszeile nach dem Prompt angezeigt werden, damit ich sie händisch fertigstellen kann und enter drücke.

Das was ich nach "add" schreibe ändert sich ständig und MUSS ich händisch machen, z.B. jetzt a123, 2 Stunden später c771 usw. Sorry, weiß nicht wie ich es besser erklären soll ;-) Es soll einfach nur per alias nach dem Prompt /home/user/tool1/tool1.py' add eingefügt, aber nicht ausgeführt werden.