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.