Một số gợi ý vỏ thông tin và hữu ích là gì? (Bash, csh, ksh, v.v.)


8

Một trong những mẹo Mac OS X Terminal yêu thích của tôi liên quan đến việc thêm quy trình chạy cuối cùng vào tiêu đề thiết bị đầu cuối bằng cách sử dụng mã sau trong .bashrc của bạn .

trap 'printf "\033]0;  `history 1 | cut -b8-`  \007"' DEBUG

Bây giờ tôi đang tìm cách tùy chỉnh dấu nhắc Bash của tôi từ mặc định thành một cái gì đó có chức năng hơn. Một số ví dụ nhắc nhở shell hữu ích là gì?

Câu trả lời:


6

Tôi sử dụng hai lớp lót đơn giản:

[\w]\n\u@\h>

hoặc là

[\w]\n\u@\h#

nếu root. Mọi người nhìn tôi như thể tôi điên khi sử dụng dấu nhắc hai dòng, nhưng tôi ghét chỉ nhìn thấy phần cuối của đường dẫn hiện tại và tôi làm việc với các đường dẫn quá dài để đặt toàn bộ dòng trên cùng một dòng với khu vực đầu vào.


Vì vậy, tôi phải điên cuồng khi sử dụng dấu nhắc 3 dòng, lol.
Ivan

7

Tôi có một tập lệnh ~/bin/setpromptđược thực thi bởi .bashrc, chứa:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

Kịch bản lệnh này đặt lời nhắc đến tên máy chủ theo sau :)nếu lệnh cuối cùng thành công và :(nếu lệnh cuối cùng thất bại.


4

Tuy nhiên, đây là thứ tuyệt vời nhất tôi từng thấy:

PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Managing \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]jobs.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]CPU Load: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Uptime: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}d; fi ; echo -n ${hours}h${mins}m)\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]$(ls -l | grep "^-" | wc -l | tr -d " ") \[\033[0m\]\[\033[0;28m\]files using \[\033[0m\]\[\033[1;31m\]$(ls --si -s | head -1 | awk '\''{print $2}'\'')\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[1;31m\]\u\[\033[0m\]\[\033[0;31m\]@\[\033[0m\]\[\033[1;31m\]\h \[\033[0m\]\[\033[1;34m\]\w\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:. \[\033[0m\]\[\033[1;37m\]$ \[\033[0m\]'

Cho nó một shot. Nó cung cấp thông tin tốt, nhưng nó thực sự sẽ khiến tải trên các hộp của bạn tăng lên chỉ bằng cách nhấn enter tại một dấu nhắc!


1
hah, rất ấn tượng
Dave K

Có vẻ tốt, nhưng không hoạt động trên hộp freebsd của tôi :(
Eugene Yarmash 22/03

@eugene y: Một số trong những đường dẫn đó có thể không có trên các hộp FreeBSD ...
Glen Solsberry

Nhìn đáng sợ, nhưng ấn tượng!
siliconpi

3

Tôi là một fan hâm mộ của dấu nhắc bash Cygwin mặc định:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

hoặc không có màu:

PS1='\n\u@\h \n\$ '

giống như:

username@hostname
$ ls -l

2

Tôi thích bao gồm cả thời gian trong tôi. Cung cấp cho tôi một loại tích hợp timexung quanh các lệnh của tôi:

PS1="[\t \u@\h:\w]$ "

Mặc dù sau khi nhìn thấy một vài trong số này, nó khiến tôi muốn làm cho tôi thông minh hơn một chút!


2

Đây là của tôi (cuộn sang bên phải để xem bit thú vị hơn):

'-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\u@\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$ 

Đây là kết quả:

-------------------------------------------------------------------------------
[~]
user@host()$ 

Khi tôi ở trong kho Git :

-------------------------------------------------------------------------------
[~/path_to_repo]
user@host(master)$ 

Tôi chọn sử dụng nhiều ngắt dòng và "thước kẻ ngang" để quét bộ đệm dễ dàng hơn và vì vậy tên đường dẫn dài không đẩy con trỏ quá xa sang phải.


1

Trong ksh:

Trong .profile của tôi, tôi đặt var sau (vì vậy var này chỉ được đặt một lần mỗi phiên, bất kể tôi làm bao nhiêu 'su:

PCH=\>

Trong .kshrc của tôi, tôi có:

if let "${SPID:-0} != $$"; then
    PCHS="$PCHS$PCH"
fi

Tôi trở thành root với các bí danh sau, thay vì "su" (kroot là người dùng root có vỏ ksh thay vì sh (solaris) hoặc bash (linux):

alias root='PCH=\# su -m kroot'
alias me="PCH=\> su -m $USER"

Tôi cũng đã định nghĩa hai chức năng này:

function lprompt {
  PS1=$HOST' $? $PWD '"$PCHS "
}
function sprompt {
  PS1='$?":"${PWD##*/}'"$PCHS "
}

và cuối cùng ở cuối .kshrc tôi có:

lprompt

Tất cả điều này mang lại cho tôi theo mặc định cài đặt tự động ở cuối dấu nhắc của tôi để cho biết tôi có phải là root hay không (và đến lượt tôi có cha mẹ là root), thư mục làm việc hiện tại, tên máy chủ và trạng thái thoát của quá trình cuối cùng. spompt giảm tên máy chủ, thu nhỏ đường dẫn xuống chỉ còn tên cơ sở và xóa khoảng trắng:

g3 0 /home/jj33 > expr 1 / 0
expr: division by zero
g3 2 /home/jj33 > expr 1 / 1
1
g3 0 /home/jj33 > root
Password: 
g3 0 /home/jj33 ># me
g3 0 /home/jj33 >#> ^D
g3 0 /home/jj33 ># sprompt
0:jj33># me
g3 0 /home/jj33 >#> sprompt
0:jj33>#>expr 1 / 0
expr: division by zero
2:jj33>#>

Các bí danh gốc / tôi là bourne từ chính quyền tiền sudo trên Solaris và các thói quen cũ đã chết cứng. Tôi nghi ngờ bất cứ ai sẽ thực hiện điều tương tự chính xác những ngày này. Các chức năng thay đổi nhanh chóng và trạng thái tồn tại tiếp tục rất có giá trị đối với tôi.


1

Tôi có một lời nhắc rất đơn giản, nhưng sử dụng màu sắc để cung cấp thêm một số thông tin:

drewble:~$ 

Màu sắc của tên máy chủ (trong trường hợp này) là khác nhau trên mỗi máy - khi tôi nhận được một máy mới mà tôi làm việc, tôi chọn một màu tùy ý cho máy đó. Theo cách đó, khi tôi mở rất nhiều thiết bị đầu cuối, thật dễ dàng để biết máy nào họ được SSH vào và giảm những lỗi tôi mắc phải khi sử dụng sai máy. Ngoài ra, khi tôi làm sudo -s, tôi đặt tên máy chủ trong tất cả các chữ hoa và tô màu đỏ cho dấu hai chấm, một lần nữa, điều này làm giảm các lỗi bằng cách làm rõ rằng bạn đang đóng vai trò là root. Đường dẫn (thư mục nhà của tôi, ~trong trường hợp này) có màu xanh lá cây tươi sáng, giúp phân tách các dòng đầu ra; nếu một cái gì đó tạo ra nhiều đầu ra, thật dễ dàng để cuộn lên và xem đầu ra bắt đầu từ đâu.

# Color the hostname
HOSTNAME=`hostname|sed -e 's/\..*$//'`
if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
    export HOST_COLOR="\[\033[1;35m\]"
fi
if [ $HOSTNAME = 'drewble' ]; then
    export HOST_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
    export HOST_COLOR="\[\033[1;31m\]"
fi

# Color the colon red & capitalize hostname if root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
    COLON_COLOR='1;31m'
fi
if [ ${UID} -eq 0 ]; then
    HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
fi

# Set the actual prompt
PS1=`echo -ne "$HOST_COLOR$HOSTNAME\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`

1

Nó không phải là một dấu nhắc shell, nhưng nó là một tùy chỉnh có thể phù hợp với tinh thần của những gì bạn đang yêu cầu.

Tôi đặt biến môi trường sau:

if [ -z "$PROMPT_COMMAND" ]; then
    export PROMPT_COMMAND='history -a'
else
    export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
fi

Bằng cách này, nếu tôi có nhiều thiết bị đầu cuối mở thông qua màn hình hoặc bất cứ điều gì, tôi sẽ không bị mất lịch sử khi chúng thay đổi nhau.


1
  export PS1="\[`if [[ $? = 0 ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi`:\w\n$ "

Điều này hiển thị:

hostname:~
$ 

Với 'tên máy chủ' có màu xanh lục nếu mã trả về lệnh được thực hiện cuối cùng là '0' và màu đỏ nếu đó là> '0'.


1

Tương tự như câu trả lời của sự hỗn loạn , tôi giống như

\u@\h:\w\n\u@\h:\$

mang lại cho tôi

root@host-10548:/var/www/site.org
root@host-10548:$

Bằng cách bao gồm người dùng / máy chủ lưu trữ trên dòng đầu tiên, tôi có thể dễ dàng sao chép toàn bộ dòng đường dẫn đó khi tôi đang sử dụng SCP hoặc rsync để gửi một số tệp vào thư mục đó.


Ý tưởng tuyệt vời Tôi có thể thấy có đường dẫn scp hoàn chỉnh rất hữu ích. Dòng thứ hai có thể được cải thiện bằng cách thêm thời gian như gms8994 đề xuất.
Dave K

0

Đối với bash tôi thích

PS1 = "\ h \ d \ t \ w \ n \ u>"

kết quả là:

myserver Mon ngày 07 tháng 9 07:43:11 / u08
root>

Vì vậy, bạn nhận được tên máy chủ, ngày và thời gian, đường dẫn đầy đủ, và sau đó tên người dùng trên một dòng mới, với lời nhắc. Đó là để giảm thiểu dòng bọc sâu trong thư mục. Tôi ở trong và ngoài hộp cả ngày, vì vậy tất cả những gì tôi có thể làm để giữ cho nó thẳng là tốt. Tôi cũng đã thiết lập putty để đăng nhập mọi thứ. Tôi có thể quay lại và xem nhật ký, và xem chính xác những gì tôi đã làm khi nào. Cũng thuận tiện để tìm ra chuỗi các sự kiện trong một số cửa sổ đầu cuối cùng một lúc.


0

Lời nhắc bình thường của tôi là

\u@\h $PWD $WINDOW [$?] \$

Điều này mang lại cho tôi người dùng hiện tại, thư mục hiện tại của máy chủ lưu trữ ( không thay thế $ HOME bằng ~), screencửa sổ hiện tại và trả về lỗi cuối cùng. Vì tôi thường mở 16 cửa sổ màn hình trở lên, nên biết cửa sổ hiện tại là hữu ích.


0

Lời nhắc zsh của tôi:

[andrew@hostname ~]%

Thông thường, nó có màu đỏ và trắng với thư mục hiện tại có màu hồng. Nếu root thì màu xám đậm hơn với tên máy chủ màu đỏ. Nếu $?không bằng 0 thì% cuối cùng được hiển thị màu đỏ.

function precmd {

   ERR=$?

   if [ $UID -eq 0 ]; then
       MYPROMPT="$(print '%{\e[1;30m%}[%{\e[0m%}')$(print '%{\e[1;31m%}%n%{\e[0m%}')@$(print '%{\e[1;31m%}%m%{\e[0m%}') $(print '%{\e[1;35m%}%3c%{\e[0m%}')$(print '%{\e[1;30m%}]%{\e[0m%}')"
   else
       MYPROMPT="[$(print '%{\e[1;31m%}%n%{\e[0m%}')@%m $(print '%{\e[1;35m%}%3c%{\e[0m%}')]"
   fi

   if [ $ERR -ne 0 ]; then
       ERROR="$(print '%{\e[1;31m%}%#%{\e[0m%}') "
       export PS1=$MYPROMPT$ERROR
   else
       export PS1="$MYPROMPT%# "
   fi

   export RPS1=""
}
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.