Nếu sshd của bạn không cung cấp các biến hữu ích, bạn có thể sử dụng
ps -p $PPID
hoặc một số thủ thuật ps ngẫu nhiên khác (nếu shell của bạn không được đặt $PPID
) để xem liệu tiến trình cha của shell có phải là quá trình đăng nhập từ xa của bạn hay không. Sau đó, nếu cha-is-remote-thingie chuyển $ PS1. Và sau đó tải xuống OpenSSH và sử dụng các đề xuất của geekizard / Caleb vì máy chủ ssh của bạn là rác. ;)
Hoặc, bạn có thể sử dụng đầu ra của "tôi là ai", lấy trường cuối cùng (nghĩa là $( who am i | awk '$0=$NF')
) và kiểm tra xem máy chủ lưu trữ là một điều khiển từ xa hay cục bộ để quyết định xem bạn đã đăng nhập cục bộ hay từ xa.
Hoặc bạn có thể bật đầu ra $(hostname)
để có vỏ của bạn sử dụng $ PS1 thích hợp trên các máy chủ cụ thể.
Hoặc, hãy thực sự đi hạt. Nếu bạn đang sử dụng trình bao hiện đại - như bash, ksh93 hoặc zsh, bạn có thể tận dụng thực tế là $ PS1 được đánh giá lại khi thực hiện. Vì vậy, bạn có thể bao gồm một khối điều kiện nội tuyến để thực hiện các công cụ git điên nếu cwd của bạn nằm trong kho lưu trữ và một cái gì đó bên ngoài. Ví dụ, ở đây tôi đang thực hiện thay đổi nhanh chóng tùy thuộc vào thư mục tôi đang sử dụng [[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )
, về cơ bản.
default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$
Chắc chắn, định nghĩa $ PS1 sẽ trông thật điên rồ trong hồ sơ của bạn, nhưng sau đó bạn chỉ nhận được những thứ git siêu sặc sỡ khi bạn thực sự ở trong kho git, trong khi bạn có màu sắc thông thường ở nơi khác. :) Lưu ý rằng bạn phải sử dụng các trích dẫn đơn xung quanh bài tập PS1. Bạn không muốn các biến được mở rộng khi PS1 được gán; bạn muốn chúng được mở rộng khi $ PS1 được đánh giá sau này. Vì vậy, dấu ngoặc đơn.