Wie Eingabeaufforderung der Unterschale ändern

8

Ich versuche ein einfaches Skript zu erstellen, das unter anderem eine Subshell erstellt:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

Die Frage ist: Ich muss die Standardaufforderung ändern, also zum Beispiel:

$ # Standard-Shell
$ ./myscript
(Myscript) $ # Subshell
(Myscript) $ exit
$

Ich habe versucht mich zu ändern PROMPTund PS1, aber keines dieser Werke. Wie kann ich das machen?

PS.: Ich brauche eine Lösung, die wenn möglich sowohl auf Bash als auch auf ZSH funktioniert.

Lucas Sampaio
quelle
Mögliche Veröffentlichung des einfachen
Thomas Nyman
Kein genaues Duplikat, da diese andere Frage nur für war bash.
Stéphane Chazelas
Sieht aus wie das richtige Duplikat ;-(
Gänseblümchen

Antworten:

7

Ich denke, Sie können eine Subshell mit einer anderen Eingabeaufforderung wie der folgenden erstellen:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

Beispiel

Aktuelle Umgebung:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

In der Unterschale:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Zurück zur Originalschale:

$ 
slm
quelle
1
Sie können here stringanstelle der Prozessersetzung eine verwenden. zB <<< "PS1...".
Jordan
1
@ Jordanm - können Sie ein Beispiel geben? Ich habe damit herumgespielt, konnte aber mit den hier angegebenen Zeichenfolgen kein funktionierendes Beispiel finden.
slm
2

Der Grund ist es nicht Arbeit sein könnte , denn wenn man die Schale laden (was zB sein sollte .: /bin/bash), wird es bis Nachladen seine Konfigurationsdateien beenden, die die Umgebungsvariablen für die prompte umfassen (zB .: $HOME/.bashrc) nach der übergeben wird Umgebungsvariablen, die Sie möchten - daher werden Ihre Variablen verworfen.

Möglicherweise möchten Sie die Optionen der Shell überprüfen, um benutzerdefinierte Konfigurationsdateien zu laden (z. B. --rcfilein Bash IINM) und diese zu verwenden sowie \envdie gewünschten Umgebungsvariablen zu übergeben. Das Problem ist, dass die Subshell nach dem Auslösen von der Shell abhängig wird.

( CAVEAT EMPTOR : Ich halte dies noch nicht für eine Antwort - insbesondere habe ich noch nichts davon in meinem System ausprobiert.)

Luis Machuca
quelle