2009-06-18 2 views
0

Ich versuche, das Verzeichnis der Schale ich die Ruby-Skript Form mich über den Ruby-Skript starten zu ändern ...Fahrbefehl in Eltern-Shell von Ruby

Mein Punkt ist ein kleines Programm zu bauen Favoriten zu verwalten Verzeichnisse und einfach zwischen ihnen wechseln.

Hier ist, was ich tat

#!/usr/bin/ruby 
Dir.chdir("/Users/luca/mydir") 

and than tried executing it in many ways... 

my_script (this doesn't change the directory) 
. my_script (this is interpreted as bash) 
. $(ruby my_script) (this is interpreted as bash too!) 

irgendeine Idee?

Antwort

4

Kann nicht gemacht werden. Untergeordnete Prozesse können ihre Elternumgebung (einschließlich des aktuellen Arbeitsverzeichnisses des übergeordneten Elements) nicht ändern. Der Trick . (auch bekannt als source) funktioniert nur mit Shell-Skripten, weil Sie der Shell sagen, dass sie diesen Code im aktuellen Prozess ausführen soll (anstatt einen Unterprozess zum Ausführen zu erzeugen). Just for fun versuchen 10 in eine Datei, die Sie auf diese Weise (Spoiler: Sie werden ausgeloggt).

Wenn Sie die Illusion dieser Arbeit haben möchten, müssen Sie Shell-Funktionen erstellen, die Ihr Ruby-Skript aufrufen und haben die Shell-Funktion die tatsächliche cd tun. Da die Funktionen im aktuellen Prozess ausgeführt werden, können sie das Verzeichnis ändern. Zum Beispiel dieses Ruby-Skript (genannt temp.rb) gegeben:

#!/usr/bin/ruby 

print "/tmp"; 

Sie diese BASH-Funktion (in, sagen wir, Sie ~/.profile) schreiben konnte:

function gotmp { 
    cd $(~/bin/temp.rb) 
} 

Und dann könnte man sagen gotmp bei die Befehlszeile und das Verzeichnis muss geändert werden.

+0

sehr interessant ... Ich werde daran arbeiten .. Übrigens, wissen Sie von einer Befehlszeile Dienstprogramm zur besseren Navigation, Favoriten usw. (nicht ein vollständiger Dateimanager wie MC)? danke – luca

+0

Tab Vervollständigung schließt die meisten der Notwendigkeit für "Favoriten" aus, Sie können auch auf symbolische Links (ln -s/tmp ~/tmp) zu sehen. Sie können auch in Pushd und Popd als Alternativen zu CD suchen. –

+0

Chas, Entschuldigung, bitte, aber könntest du diese Frage http://StackOverflow.com/Questions/1151217 betrachten und sehen, ob du etwas Licht darauf werfen kannst, bitte? Vielen Dank. –

0
#!/usr/bin/env ruby 

`../your_script` 

Gefällt mir das?

Oder starten Sie Ihr Skript in dem Verzeichnis, in dem es etwas tun soll.

Vielleicht bekomme ich Ihre Frage nicht. Geben Sie weitere Details an.