Umgebungsvariablen setzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Umgebungsvariablen setzen

Beitrag von inne » 03.06.2021 09:57:41

Hallo,

ein User kann nur über danted an localhost:1080 raus ins WWW. Doch manchmal tun es torify und socksify nicht (socksify z.B. bei youtube-dl) und ich muss die *_proxy Variablen setzen. Dazu habe ich 4 Scripte in ~/.bin die das tun (set-www-proxy set-tor-proxy set-i2p-proxy und unset-proxys).
Aufrufen als Programm geht so imo nicht, da ein export VARIABLE nur für die Kindprozess gilt und nicht für die aufrufende Shell. So das ich die Scripte also immer includen muss . ~/.bin/set-....
Kann man das mit einem genialen Shebang o.ä. so lösen das ich nur set-... im Terminal aufrufen muss? Das ist einfach der bessere Workflow (wie ich für mich finde).

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Umgebungsvaribalen setzen

Beitrag von JTH » 03.06.2021 12:43:42

Was sind denn Varibalen? Variablen mit Hang zum Kannibalismus? :P :wink:

Ich glaube nicht, dass es da einen so kurzen Weg für gibt, so wie du in suchst. Das wäre ja auch sicherheitstechnisch ein Problem, wenn man die Umgebung des Aufrufers verändern könnte, ohne das dieser das explizit möchte – ein Skript zu sourcen, anstatt aufzurufen, wäre ein „expliziter“ Weg. (Lerne aber gern dazu, wenn es doch irgendwie möglich ist.)

Eine Variante, die mir einfallen würde, wenn auch nicht genau das, was du dir vorstellst:

Code: Alles auswählen

$ cat set-www-proxy
#!/bin/sh
export SOME_VAR=42
exec bash -i

Pythons venv benutzt ja den gleichen Weg, ein Skript zum Anschalten und Setzen einiger Variablen zu sourcen – da scheint man auch keinen anderen Weg gefunden zu haben:

Code: Alles auswählen

/tmp/tmp.3g49BMfLXg$ python3 -m venv .
/tmp/tmp.3g49BMfLXg$ . bin/activate
(tmp.3g49BMfLXg) /tmp/tmp.3g49BMfLXg$ deactivate 
/tmp/tmp.3g49BMfLXg$
Manchmal bekannt als Just (another) Terminal Hacker.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Umgebungsvaribalen setzen

Beitrag von eggy » 03.06.2021 12:44:11

Ich bin nicht sicher, ob ich Dich richtig verstanden hab, aber wäre nen alias hier nicht das Richtige?

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Umgebungsvaribalen setzen

Beitrag von JTH » 03.06.2021 12:55:52

Noch eine Ergänzung:
inne hat geschrieben: ↑ zum Beitrag ↑
03.06.2021 09:57:41
So das ich die Scripte also immer includen muss . ~/.bin/set-....
Wenn ~/.bin bei dir im PATH ist, geht das Sourcen auch ohne relativen oder absoluten Pfad:

Code: Alles auswählen

~$ . set-www-proxy
Siehe:
help . hat geschrieben: .: . filename [arguments]
Execute commands from a file in the current shell.

[…] The entries in $PATH are used to find the directory containing FILENAME.
Manchmal bekannt als Just (another) Terminal Hacker.

inne
Beiträge: 3273
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Umgebungsvaribalen setzen

Beitrag von inne » 03.06.2021 15:23:10

JTH hat geschrieben: ↑ zum Beitrag ↑
03.06.2021 12:55:52
Wenn ~/.bin bei dir im PATH ist, geht das Sourcen auch ohne relativen oder absoluten Pfad:

Code: Alles auswählen

~$ . set-www-proxy
Siehe:
help . hat geschrieben: .: . filename [arguments]
Execute commands from a file in the current shell.

[…] The entries in $PATH are used to find the directory containing FILENAME.
Habe das einmal probieren, funktioniert hier in BASH aber nicht. Fehlt mir da ein bash-completion?
Aber das wäre sonst genau was ich gerne möchte. Wobei man dann alles im PATH auch für source bzw. . hat? Auch nicht so schön :|
Ok, es findet dann die Datei in PATH, aber ohne Autovervollständigung. Deswegen habe ich mir wohl das tippen von . ~/bin/TAB TAB angewöhnt.

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Umgebungsvaribalen setzen

Beitrag von JTH » 03.06.2021 16:42:15

inne hat geschrieben: ↑ zum Beitrag ↑
03.06.2021 15:23:10
Fehlt mir da ein bash-completion?
Die Completion schlägt da normalerweise wohl nur Dateinamen (ausgehend vom aktuellen Ordner) vor. Das ist der Standard, wenn keine speziellere Vorgehensweise durch Debianbash-completion konfiguriert ist.

Entweder tippst du das set-… erstmal ohne . am Anfang (das geht ja, wenn die im PATH sind), gehst dann nach vorne und setzt den Punkt davor.

Oder du könntest folgendes nach ~/.bash_completion packen:

Code: Alles auswählen

complete -c -o default . source
Das sorgt dafür, dass hinter . und source sowohl Datei-, als auch Kommandonamen vorgeschlagen werden.
Manchmal bekannt als Just (another) Terminal Hacker.

Antworten