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.


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:

$ 

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.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.