Làm thế nào để thay đổi dấu nhắc của subshell


8

Tôi đang cố gắng tạo một tập lệnh đơn giản, trong số những thứ khác, sẽ tạo ra một tập hợp con:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

Câu hỏi là: Tôi cần thay đổi lời nhắc mặc định, ví dụ:

$ # shell mặc định
$ ./myscript
(myscript) $ # subshell
(myscript) $ exit
$

Tôi đã cố gắng thay đổi PROMPTPS1, nhưng không ai trong số này hoạt động. Làm thế nào tôi có thể làm điều đó?

Tái bút: Tôi cần một giải pháp hoạt động cả trên Bash và ZSH, nếu có thể.



Không chính xác trùng lặp như câu hỏi khác bashchỉ dành cho .
Stéphane Chazelas

Trông giống như bản sao đúng ;-(
daisy

Câu trả lời:


7

Tôi nghĩ bạn có thể tạo một subshell với một dấu nhắc khác như thế này:

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

Thí dụ

Env hiện tại:

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

Trong vỏ phụ:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Quay lại vỏ ban đầu:

$ 

1
Bạn có thể sử dụng here stringthay thế quá trình thay thế. ví dụ <<< "PS1...".
jordanm

1
@jordanm - bạn có thể cung cấp một ví dụ? Tôi đã loay hoay với điều này nhưng không thể lấy một ví dụ hoạt động bằng cách sử dụng các chuỗi ở đây.
slm

2

Lý do nó không hoạt động có thể là do khi bạn tải shell (ví dụ:. /bin/bash), Nó sẽ tải lại các tệp cấu hình của nó, bao gồm các biến môi trường cho dấu nhắc (ví dụ $HOME/.bashrc:) sau khi được truyền các biến môi trường bạn muốn - do đó các biến của bạn bị loại bỏ.

Bạn có thể muốn kiểm tra các tùy chọn của trình bao để tải các tệp cấu hình tùy chỉnh (ví dụ: --rcfiletrong Bash IINM) và sử dụng các tùy chọn đó cũng như \envđể truyền các biến môi trường mà bạn muốn. Vấn đề là một khi bạn làm điều đó, việc bắn con sẽ trở nên phụ thuộc vào vỏ.

( CAVEAT EMPTOR : Tôi chưa coi đây là câu trả lời - đặc biệt, tôi chưa thử bất kỳ câu hỏi nào trong hệ thống của mình.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.