Dave86
Anmeldungsdatum: 2. September 2014
Beiträge: Zähle...
|
Hallo zusammen, ich hab nun schon Google zerpflückt und leider nichts zu der Thematik gefunden, vielleicht kennt ihr ja einen Weg: Ich habe in der .bashrc einen alias definiert, welcher im Prinzip ein "cd" in ein bestimmtes Verzeichnis macht. Da in diesem Verzeichnis einige Dateien liegen und ich einzelne dieser Dateien IMMER mit rsync irgendwo hinlade, hätte ich gerne eine Möglichkeit, "rsync" in die Shell zu schreiben, ohne vorherigem oder nachfolgendem Zeilenumbruch. Quasi so, dass man den Befehl selbst fertig schreiben kann. Mit echo geht das offensichtlich nicht. Kennt Ihr hier eine Möglichkeit FÜr Hilfe wäre ich sehr dankbar. Viele Grüße,
Dave
|
deXXteR275
Anmeldungsdatum: 7. Juni 2013
Beiträge: 46
Wohnort: Bad Hersfeld
|
Hi heißt das du willst wenn du eine neue bash aufmachst, dass hinter deinem prompt rsync steht und du dann weiter tippen kannst? ich versteh das ehrlich gesagt nicht so ganz 😀 edit: wie sieht denn dein alias aus?
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Im Prinzip hat das nichts mit einer neuen Bash zu tun... In der .bashrc definiere ich ja nur die Aliase, die ab dann bekannt sind und verwendet werden können. Mein Alias sieht momentan so aus: alias 10="cd /data/suse-SLES-10; ll" –> Wenn ich "10" eingebe, wechselt er in das o.g. Verzeichnis und listet die Dateien auf. Diesen Befehl möchte ich nun so erweitern, dass hinter dem Prompt "rsync" steht und der Nutzer weiterschreiben kann (das hast du richtig verstanden) Gruß,
Dave
|
deXXteR275
Anmeldungsdatum: 7. Juni 2013
Beiträge: 46
Wohnort: Bad Hersfeld
|
Ah okay verstehe. Wie das einfach funktioniert weiß ich nicht. Aber du kannst hinter dem alias ein ; machen und ein Skript aufrufen. wechsel doch mit dem alias in dein verzeichnis und führe ein skript aus was dann das macht was du willst. so würde ich das machen. | alias 10='cd /data/suse-SLES-10; /hier/pfad/zu/skript.sh'
|
und durch skript.sh steht da dann rsync und der user kann einklickern was er haben will 😛
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12834
|
deXXteR275 schrieb:
Wie das einfach funktioniert weiß ich nicht. Aber du kannst hinter dem alias ein ; machen und ein Skript aufrufen. wechsel doch mit dem alias in dein verzeichnis und führe ein skript aus was dann das macht was du willst.
Viel einfacher: benutze eine Shell-Funktion anstatt eines Alias. | mycd() {
cd /mein/spezielles/verzeichnis && rsync -und -nötige parameter
}
|
Ciao robert
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Hi, das Problem ist dann weiterhin, dass dann "rsync" in der Konsole ausgeführt wird, was dazu führt, dass die komplette Hilfe angezeigt wird, da natürlich die Parametrisierung fehlt....oder wie genau stellst du dir das Script vor ? Gruß,
David
|
deXXteR275
Anmeldungsdatum: 7. Juni 2013
Beiträge: 46
Wohnort: Bad Hersfeld
|
| echo -n "hier deinen prompt hin falls du den haben willst "
read -p "rsync " paras
rsync $paras
|
Kurzversion 😀 dann führt er rsync mit deinen eingebenen Parametern aus. So zumindest in der Theorie 😀
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Hi Robert.... leider weiß ich die "Parameter" bei der initialen Eingabe noch nicht. Im Prinzip liegen in dem Verzeichnis bestimmte (immer mal wieder andere) Installer mit recht kryptischen Namen, von denen ich immer unterschiedliche zu bestimmten Systemen hochladen (rsync) möchte. Die Liste sollte daher immer angezeigt werden. Gruß,
David
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12834
|
Dave86 schrieb:
das Problem ist dann weiterhin, dass dann "rsync" in der Konsole ausgeführt wird, was dazu führt, dass die komplette Hilfe angezeigt wird, da natürlich die Parametrisierung fehlt....oder wie genau stellst du dir das Script vor ?
Ob Skript oder Shell-Funktion, Du musst natürlich im Skript / in der Funktion festlegen, welche Parameter verwendet werden sollen. Ich hatte zumindest angenommen, dass immer der gleiche rsync abgesetzt werden soll. Alternativ kannst Du natürlich auch die Parameter an die Shell-Funktion oder das Skript übergeben: | mycd() {
cd /mein/spezielles/verzeichnis && rsync "$@"
}
# dann in der Shell
mycd -und -nötige parameter
|
Aber in dem Fall gewinnst Du m.E. nicht sehr viel.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12834
|
Dave86 schrieb:
Im Prinzip liegen in dem Verzeichnis bestimmte (immer mal wieder andere) Installer mit recht kryptischen Namen, von denen ich immer unterschiedliche zu bestimmten Systemen hochladen (rsync) möchte. Die Liste sollte daher immer angezeigt werden.
Welche Liste? Kannst Du mal beschreiben, was Du eigentlich machen willst?
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Die Lösung von dexxter (11:27 Uhr) geht schon ziemlich genau in die Richtung, was ich haben will ☺ Vielen Dank dafür schonmal. Das einzige Problem ist nun nur noch, dass die Autocompletion (mit Tab) bei der Eingabe nicht funktioniert. Kann man das noch irgendwie ändern ? Workflow ist das Hochladen von Installern verschiedener Betriebssysteme zu Kundensystemen...Das ganze ist auch eher als "Feintuning" zu betrachten, ich wollte trotzdem wissen, ob sowas prinzipiell geht. Viele Grüße,
David
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Habs gefunden ☺ "read -e -p" Vielen Dank für eure schnelle Hilfe !! Nun hab ich genau das, was ich haben will.
|
deXXteR275
Anmeldungsdatum: 7. Juni 2013
Beiträge: 46
Wohnort: Bad Hersfeld
|
Kein Problem ☺ Die Lösung von rklm ist natürlich die elegantere Variante 😛
|
Dave86
(Themenstarter)
Anmeldungsdatum: 2. September 2014
Beiträge: 7
|
Habs nun so gelöst, macht nun genau was ich will. Ausschnitt aus .bashrc: |
34 mycd() {
35 ll
36 echo ""
37 read -e -p "rsync " paras
38
39 rsync $paras
40 }
|
| 63 #Installer
64 alias 9="cd /data/installer/suse-SLES-9;mycd"
65 alias 10="cd /data/installer/suse-SLES-10;mycd"
66 alias 11="cd /data/installer/suse-SLES-11;mycd"
67 alias 32="cd /data/installer/Windows32;mycd "
68 alias 64="cd /data/installer/Windows64;mycd"
|
Vielen Dank euch ☺
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Dave86 schrieb: Habs nun so gelöst, macht nun genau was ich will. Ausschnitt aus .bashrc: |
34 mycd() {
35 ll
36 echo ""
37 read -e -p "rsync " paras
38
39 rsync $paras
40 }
|
Dein mycd macht ja gar kein cd mehr - das ist aber schlecht! Mir riecht es hier mehr nach einem Fall für select:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #/bin/bash
# cd lala
list=$(ls)
select datei in $list "/exit/" ;
do
if [[ "$datei" = "/exit/" ]]; then
break;
fi;
if [[ -f "$datei" ]]; then
echo rsync $datei;
else
echo "Keine Datei: "$datei ;
fi;
done
|
Gegenanzeigen:
Wenn Deine Dateinamen blanks und schlimmeres enthalten, und Du das nicht verhindern kannst, wird es ohne erheblichen Mehraufwand nicht klappen, denn selelct trennt bei Whitespace. Wenn Du regelmäßig mehr als eine Datei auswählst sind auch Umbauten nötig, aber wohl vertretbar. Statt "echo rsync $datei" natürlich das Kommando ohne echo aber evtl. zus. Parametern. Wenn nicht ordinäre Dateien sondern Verzeichnisse o. ärgeres versynct werden soll, dann ist der Test (-f) auch zu ersetzen.
|