පර්යන්ත විමසුම නිවැරදිව ඔතා නැත


187

මට ගැටලුවක් තිබේ, මම ඉතා දිගු විධානයන් යතුරු පුවරුවේ ටයිප් කළහොත් ටර්මිනලය මා ටයිප් කරන දේ නිවැරදිව ඉදිරිපත් නොකරයි. මට පහත දැක්වෙන විධානයක් තිබේ නම් මම බලාපොරොත්තු වෙමි:

username@someserver ~/somepath $ ssh -i /path/to/private/key
myusername@something.someserver.com

විධානය පේළි දෙකකින් දැක්විය යුතුය. ඒ වෙනුවට එය බොහෝ විට එතෙර වී මගේ විමසුමට ඉහළින් ලිවීමට පටන් ගනී.

myreallylongusername@something.somelongserver.comh -i /path/to/private/key

මම ආපසු ගොස් යම් තර්කයක් වෙනස් කිරීමට තීරණය කළහොත්, කර්සරය පෙන්වන්නේ කොතැනදැයි කියා නැත, සමහර විට විමසුමේ මැද, නමුත් සාමාන්‍යයෙන් මා ටයිප් කරන ස්ථානයට ඉහළින් .

මා Upකලින් විධානයකට ගිය විට අමතර විනෝදයක් සිදු වේ. මම මෙය gnome-terminal සහ terminator සහ i3 සහ Cinnamon යන දෙකින්ම උත්සාහ කර ඇත්තෙමි. කවුරුහරි යෝජනා කළේ එය මගේ විමසුම බවයි, එබැවින් මෙන්න එයයි:

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]

Ctrll,, resetසහ clearසියල්ලෝම ඔවුන් කියන දේ කරති, නමුත් මම නැවත විධානය ටයිප් කරන විට හෝ Upඑකම දේ සිදු වේ.

මම පරික්ෂා කර බැලුවෙමි checkwinsize. මෙය 80x24 සහ වෙනත් කවුළු ප්‍රමාණ වලින් සිදු වේ.

මෙය මා සමඟ ජීවත් වීමට ඉගෙන ගන්නා දෙයක් පමණක්ද? මා දැනගත යුතු මැජික් කෑල්ලක් තිබේද? මම ඉතා කෙටි විමසුමක් භාවිතා කිරීම සඳහා විසඳා ඇත, නමුත් එය ගැටළුව විසඳන්නේ නැත.


1
එබැවින් විධානය භාවිතා කිරීමෙන් එය env -i bash --norcනිවැරදි වේ. $ COLUMNS සහ $ LINES ගැලපේ. එයින් අදහස් කරන්නේ මගේ .bashrc සමඟ විහිලු යමක් ඇති බවයි?
මුරිකුල

ඒ නිසා මම මගේ .bashrc ගැන අදහස් දැක්වූ අතර ගැටළු සහගත කොටස ලෙස මගේ විමසුම හුදකලා කළෙමි. ඉහත PS1 හි ඇති වැරැද්ද කුමක්ද?
මුරිකුල

1
\[\033[01;32m\]\u: \[\033[01;34m\]\W \[\033[01;34m\] \$ \[\033[0m\]හැසිරීමේ අමුතුකම වළක්වන බවක් පෙනේ - නමුත් එය ඔබගේ මුල්

1
අනුව serverfault මෙම පිළිතුර , භාවිතාtput smam
Samveen

Answers:


209

නොවන මුද්රිත අනුක්රමය කළ යුතු බහා \[හා\] . ඔබේ PS1 දෙස බැලූ විට එයට පසුව අනාවරණය නොවූ අනුක්‍රමයක් \Wඇත. එහෙත්, දෙවන ප්‍රවේශය අතිරික්ත වන අතර එය පෙර ප්‍රකාශය "1; 34" පුනරාවර්තනය කරයි .

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]
                  |_____________|               |_|
                         |                       |
                         +--- Let this apply to this as well.

එනිසා මෙය වර්ණ ගැන්වීමට අදහස් කළ යුතුය:

\[\033[1;32m\]\u:\[\033[1;34m\] \W \$\[\033[0m\]
                               |_____|
                                  |
                                  +---- Bold blue.

රඳවා තබා ගනිමින් "මුල්" මෙම කටයුතු කළ ද වැඩ:

\[\033[1;32m\]\u:\[\033[1;34m\] \W\[\033[1;34m\] \$\[\033[0m\]
                                  |_|         |_|
                                   |           |
                                   +-----------+-- Enclose in \[ \]

සංස්කරණය කරන්න:

හැසිරීමට හේතුව bash, විමසුමට වඩා දිගු යැයි විශ්වාස කිරීම නිසා එය ඇත්ත වශයෙන්ම වේ. සරල උදාහරණයක් ලෙස, එකක් භාවිතා කරන්නේ නම්:

PS1="\033[0;34m$"
       1 2345678

විමසුමේ අක්ෂර 8 ක් මිස 1 නොවේ යැයි විශ්වාස කෙරේ. එබැවින් ටර්මිනල් කවුළුව තීරු 20 ක් නම්, අක්ෂර 12 ටයිප් කිරීමෙන් පසු එය 20 ක් යැයි විශ්වාස කර එය වටා එති. යමෙක් පසු අවකාශය කිරීමට උත්සාහ කරන්නේ නම් හෝ මෙය පැහැදිලි Ctrl+uවේ. එය 9 වන තීරුවේ නතර වේ.

කෙසේ වෙතත් එය අවසන් තීරුවේ එකක් ඇත්නම් මිස එය නව පේළියක් ආරම්භ නොකරයි, එහි ප්‍රති result ලයක් ලෙස පළමු පේළිය නැවත ලියනු ලැබේ.

යමෙක් දිගින් දිගටම පේළිය ටයිප් කරන්නේ නම් අක්ෂර 32 කට පසු ඊළඟ පේළියට ඔතා තිබිය යුතුය.


මුල් අනුක්‍රමය තුළ රේඛාව නැවත නැවත සිදුවීමට හේතුව කුමක්ද යන්න පිළිබඳව ඔබට - හෝ යමෙකුට පැහැදිලි කිරීමක් තිබේ නම්, මම එය දැන ගැනීමට උනන්දු වෙමි. ඔබ මෙය දෘශ්‍යමය ලෙස පෙන්වූ ආකාරය සඳහා +1 ද කරන්න.

1
@ illuminÉ: ප්‍රභවය දෙස නොබැලීම, නමුත් නිරීක්ෂණයේ හැසිරීම පිළිබඳ සටහනක් සමඟ යාවත්කාලීන කිරීමක් එක් කිරීම.
රුනියම්

ඔබට කිසියම් ගැටලුවකට මුහුණ දීමට සිදු වුවහොත්, ඔබට මෙම වෙබ් අඩවිය භාවිතා කර නව එකක් නිර්මාණය කළ හැකිය - bashrcgenerator.com
divinedragon

මෙය පුදුම සහගතයි, ස්තූතියි un රුනියම් - ඔබ මෙය දැන සිටි ආකාරය බෙදා ගැනීමට ඔබ කැමතිද? මම මේ ගැන යම් ලියකියවිලි සොයා ගැනීමට කැමතියි.
nycynik

2
ynycynik: නිරීක්ෂණය. මම හිතන්නේ මේ පිළිබඳ ලියකියවිලි වලට ආසන්නතම මූලාශ්‍ර කේතය ...
Runium

89

එය බොහෝ දුරට කළ යුත්තේ ටර්මිනලය විසින් උපකල්පනය කරන ලද කවුළුවේ ප්‍රමාණය සමඟ ඔබේ සැබෑ කවුළු ප්‍රමාණයට සමාන නොවේ. ඔබ bash භාවිතා කරන්නේ නම්, ඔබට මෙය උත්සාහ කළ හැකිය.

$ shopt checkwinsize

ඔබට නොලැබුනේ නම්

checkwinsize    on

ඉන්පසු එය සක්‍රිය කරන්න

$ shopt -s checkwinsize

ඉන්පසු වෙනත් විධානයක් ධාවනය කිරීමට උත්සාහ කරන්න (වැනි ls) හෝ කවුළුව එක් වරක් වෙනස් කිරීම, ඉහත සෑම විටම මට වැඩ කරයි.

විශේෂයෙන් Redhat පද්ධති සඳහා, ගැටළුව බොහෝ විට සිදුවන්නේ ~/.bashrcඇමතුමක් ලබා නොගැනීම වැරදි ලෙස වින්‍යාස කිරීමෙනි /etc/bashrc. සාමාන්‍යයෙන්, ~/.bashrcඇමතීමට අපේක්‍ෂා කරන /etc/bashrc, පෙරනිමියෙන් අඩංගු වන බාෂ් ලෝඩ් shopt -s checkwinsize.


OS X හා සමාන ගැටළුවක් තිබුනේ නම්, පෙනෙන විදිහට ඔබ ඔබේ පර්යන්තය ආරම්භ කිරීම සඳහා "පිවිසුම්" යනුවෙන් අමතන්නේ නම්, එය / etc / bashrc කියවන ආකාරයෙන් bash ආරම්භ කරයි, නමුත් ඔබ කෙලින්ම bash වෙත ඇමතුමක් ලබා දෙන්නේ නම් ~ / .bashrc පෙරනිමියෙන් මූලාශ්‍ර දේවල් මඟින් ඔබට අමුතු එතීමේ බලපෑමක් ලැබෙනු ඇත. ස්තූතියි!
rogerdpack

1
මෙය මටත් වැඩ කළා. මෙම විශේෂිත සේවාදායකයේ වර්ණ නොතිබුණි, නිවැරදි ලෙස ඇමතීම /etc/bashrc, අනෙක් සියල්ලම යාමට හොඳ විය ... මෙය එතීමේ ගැටළු වලට හේතුව බව පෙනේ.
dhaupin


1
හොඳ විසඳුමක් වගේ. නමුත් එය මගේ ssh සැසිය තුළ ක්‍රියා නොකරයි. එයට හේතුව කුමක්දැයි විශ්වාස නැත. මම shopt -s checkwinsizessh සැසිය තුළ විධානය ක්‍රියාත්මක කර ඇත. නමුත් එතීම දිගටම පවතී.
Qiang Xu

මෙය හරියටම මගේ ගැටලුවයි - පරිශීලකයෙකු .bashrc / etc / bashrc අමතන්නේ නැත, එබැවින් අවුල් ජාලයක් ඇති විය.
සොබ්රික්

12

මම වරක් කොතැනක හෝ කියවා ඇත්තෙමි (තවදුරටත් කොහේදැයි නොදනිමි) භාවිතා කිරීම \001සහ \002ඒ වෙනුවට \[සහ \]මෙම ගැටළුව විසඳිය හැකි බව. ඒක මට කළා.

මාර්ගය වන විට, PS1 නිර්වචනය කිරීම කැත ලෙස පෙනිය යුතු නැත.

green="\001$(tput setaf 2)\002"
blue="\001$(tput setaf 4)\002"
dim="\001$(tput dim)\002"
reset="\001$(tput sgr0)\002"

PS1="$dim[\t] " # [hh:mm:ss]
PS1+="$green\u@\h" # user@host
PS1+="$blue\w\$$reset " # workingdir$

export PS1
unset green blue dim reset

4
මගේ PS1 විධානයක් අමතන්නේ OP හි ගැටළුවට තුඩු දෙන printf ගැලවීමේ අනුක්‍රමයයි. මෙම විසඳුම පමණක් මට ගැටලුව විසඳයි.
රික් මීෂම්

10

වෙනත් පිළිතුරු වල සඳහන් කර ඇති පරිදි, මුද්‍රණය \e[0;30mකළ නොහැකි අනුපිළිවෙලවල් ඔතා තිබිය යුතුය \[...\].

මීට අමතරව (සහ මම තවමත් සඳහන් බලන්න එපා) එය බව පෙනේ වේ \r\nවිය යුතු පිටත පිළිබඳ \[...\]ඔබ බහු-රේඛාව කඩිනම් තිබේ නම්. අවසාන වශයෙන් එය වටහා ගැනීමට මට යම් අත්හදා බැලීමක් හා දෝෂයක් අවශ්‍ය විය.


7

මෙය ඔබගේ COLUMNSසහ LINESපරිසර විචල්‍ය සැකසුම් සමඟ ගැටළුවක් සේ පෙනේ . ඔබ කවුළුව ප්‍රතිප්‍රමාණනය කරන විට ඒවා සාමාන්‍යයෙන් ස්වයංක්‍රීයව gnome-terminal මගින් සකසා ඇත (මම විශ්වාස කරමි) විධානය නිකුත් කිරීමෙන් ඔබට ඒවා අතින් සැකසීමට බල කළ හැකිය resize.

උදාහරණයක්

මම මගේ gnome- පර්යන්තය 79x17 ලෙස ප්‍රතිප්‍රමාණනය කළහොත් මගේ විචල්‍යයන් එලෙස පෙන්වයි:

$ echo $COLUMNS; echo $LINES
79
17

මට එය එසේ බල කළ හැකිය:

$ resize
COLUMNS=79;
LINES=17;
export COLUMNS LINES;

1
සිත්ගන්නාසුළු නමුත් උදව් නොකරයි.
මුරිකුල

1
මෙය මගේ ගැටලුව නිරාකරණය කළේ මා "තිරය" විධානය ක්‍රියාත්මක කිරීමෙන් පසුව එය නිවැරදිව රේඛා ඔතා නොතිබීමයි. ස්තූතියි !!
nukeguy

විධානය resizeපැමිණෙන්නේ කුමන පැකේජයෙන් ද?
දක්වා

@till - එය X11 හි කොටසක් යැයි සිතන්න - kb.iu.edu/d/abwh
slm

6

එතීම වැළැක්වීම සඳහා, ඔබට භාවිතා කරන තීරු ගණන වැඩි කළ හැකිය, උදා

stty columns 120

1
එතරම් හොඳ අදහසක් නොවේ, එය ඉතා අමානුෂික ලෙස අවුල් විය
phil294

3

පුළුල් යුනිකෝඩ් සංකේත භාවිතා කිරීමෙන් ද එම ගැටළුව ඇතිවිය හැකිය ( https://stackoverflow.com/a/34812608/1657819 වැනි ). ගැටළුව ඇති කරන ස්නිපටය මෙන්න (මතක තබා ගන්න $Greenසහ $Redනිසි ලෙස ගැලවී ඇති වර්ණ නූල්):

FancyX='\342\234\227'
Checkmark='\342\234\223'


# Add a bright white exit status for the last command
PS1="$White\$? "
# If it was successful, print a green check mark. Otherwise, print
# a red X.
if [[ $Last_Command == 0 ]]; then
    PS1+="$Green$Checkmark "
else
    PS1+="$Red$FancyX "
fi

Bash හට දිග නිවැරදිව ගණනය කළ නොහැක, එබැවින් පහසුම ක්‍රමය වනුයේ එම පුළුල් සංකේත තුනෙන් 2 න් ගැලවීමයි.

FancyX='\[\342\234\]\227'
Checkmark='\[\342\234\]\223'

තේරුමක් ඇති කරයි. මම අනුමාන කරන දෙය නම් බාෂ් අක්ෂර ගණනය කිරීමයි. X එක් වර්‍ගයක් ගන්නා නමුත් එය 3 ලෙස ලියා ඇති නිසා, ගණනය කිරීම නිවැරදි කිරීම සඳහා යමෙකුට ඒවායින් 2 ක් කොටු කළ යුතුය. la බ්ලවුහර්න් පිළිතුර මඟින් \001සහ සමඟ ශ්‍රිතයක් කරන්නේ කෙසේද යන්න පැහැදිලි කරයි \002.
akostadinov

FYI, මෙම ආකෘතියෙන් බහු-බයිට් යුනිකෝඩ් අක්ෂර ප්‍රතිදානය කරන්නේ කෙසේදැයි ඔබ හදුනා ගන්නේ මෙයයි: stackoverflow.com/a/602924/520567
akostadinov

1

tput smam

උබුන්ටු 19.10 හි ග්නෝම් පර්යන්තයක ඇති අතර TERM=xterm-256color, මෙය හරියටම ගැලවීමේ අනුක්‍රමය විමෝචනය කරයි.

tput smam

එයින් ගැලවීම යනු කුමක්දැයි ඔබට දැක ගත හැකිය:

tput smam | hd

ටර්මිනල් තත්වය නැවත සැකසීම:

reset

සැකසීමේ බලපෑමක් ද ඇති බව පෙනේ tput smam.

මෑන් පිටුව:

man terminfo

ලේඛන smamසහ එහි ප්‍රතිවිරුද්ධතාව rmam:

       enter_am_mode   smam   SA   turn on automatic margins
       exit_am_mode    rmam   RA   turn off automatic margins

කෙසේ වෙතත් සමහර පර්යන්ත වලට එම හැකියාව නොමැති බව සලකන්න, උදා: tmuxඅප තුළ ඇති TERM=screen-265colorඅතර smamහැකියාවන් ලැයිස්තුවේ නොපෙන්වයි:

infocmp

ඒ නිසා tput smamකිසිවක් මුද්‍රණය නොකරයි.

කෙසේ දැයි මට විශ්වාස නැත, නමුත් QEMU ට tmux හි රේඛීය එතීමේ තත්වය වෙනස් කිරීමට tputනොහැකි විය .

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.