टर्मिनल में ASCII बैनर: bash, zsh, fish, PowerShell और SSH लॉगिन
बैकस्लैश बचाने के लिए कोट वाला heredoc या फ़ाइल इस्तेमाल करें, और scp चलता रहे इसलिए सिर्फ़ इंटरैक्टिव शेल में दिखाएँ।
हर बार टर्मिनल खोलने पर आपके नाम या मशीन के नाम वाला बैनर अच्छा लगता है, और एक नज़र में बता देता है कि आप किस कंप्यूटर पर हैं। यह गाइड बताती है कि lab.ascii पर बना बैनर अपने शेल की स्टार्टअप फ़ाइलों में कैसे लगाएँ।
उदाहरणों में Small फ़ॉन्ट में “DEV” है। इसमें बैकस्लैश (\) हैं, इसलिए कुछ बिगड़ा तो तुरंत दिख जाएगा।
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
पहले दो बातें जान लें
बैकस्लैश बचाएँ
अगर आप echo "..." से बैनर दिखाते हैं, तो शेल \ और $ को ख़ास अक्षर मानता है, और आर्ट के हिस्से ग़ायब या बदल सकते हैं। इनमें से कोई तरीक़ा अपनाएँ:
- कोट वाला heredoc: आख़िरी मार्कर को कोट में रखें, जैसे
cat <<'EOF', तो शेल सब कुछ बिल्कुल वैसा ही दिखाता है जैसा लिखा है। - फ़ाइल: नतीजे को TXT बटन से सेव करें और
catसे दिखाएँ। तब किसी अक्षर को एस्केप करने की ज़रूरत नहीं।
सिर्फ़ इंटरैक्टिव शेल में दिखाएँ
scp, rsync और sftp रिमोट मशीन पर एक शेल शुरू करते हैं, और वह शेल आपकी स्टार्टअप फ़ाइलें पढ़ सकता है। अगर उस समय बैनर छपता है, तो फ़ाइल ट्रांसफ़र फ़ेल हो सकता है। बैनर सिर्फ़ इंटरैक्टिव शेल में दिखाएँ, यानी जो किसी इंसान ने खोला हो।
bash: ~/.bashrc
इसे ~/.bashrc के आख़िर में जोड़ें:
if [[ $- == *i* ]]; then
cat <<'EOF'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
EOF
fi
- अगर
$-मेंiहै, तो शेल इंटरैक्टिव है। - आख़िरी
EOFलाइन की शुरुआत में होना चाहिए। आगे स्पेस हों तो bash उसे नहीं पहचानता।
अगर आपने TXT फ़ाइल ~/.banner.txt के रूप में सेव की है, तो एक लाइन काफ़ी है:
[[ $- == *i* && -r ~/.banner.txt ]] && cat ~/.banner.txt
macOS का डिफ़ॉल्ट शेल zsh है, इसलिए Mac पर नीचे का zsh वाला हिस्सा देखें।
zsh: ~/.zshrc
zsh सिर्फ़ इंटरैक्टिव शेल में ~/.zshrc पढ़ता है, इसलिए अलग जाँच की ज़रूरत नहीं। वही heredoc काम करता है:
cat <<'EOF'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
EOF
अगर आप instant prompt के साथ Powerlevel10k इस्तेमाल करते हैं, तो स्टार्टअप पर कंसोल आउटपुट की चेतावनी आ सकती है। बैनर का कोड ~/.zshrc में सबसे ऊपर वाले instant prompt ब्लॉक के ऊपर रखें।
fish: fish_greeting
fish शुरू होते समय अपना स्वागत संदेश दिखाने के लिए fish_greeting फ़ंक्शन चलाता है। अपना फ़ंक्शन बनाएँ, तो बैनर डिफ़ॉल्ट संदेश की जगह ले लेता है। इसे ~/.config/fish/config.fish में रखें:
function fish_greeting
cat ~/.banner.txt
end
fish में सिंगल कोट वाली स्ट्रिंग \\ को एक \ में बदल देती है, इसलिए बैनर को स्ट्रिंग में पेस्ट करने से फ़ाइल दिखाना ज़्यादा सुरक्षित है।
रंग जोड़ना
बैनर से पहले ANSI रंग कोड और बाद में रीसेट कोड दिखाएँ। bash या zsh में:
printf '\033[36m' # cyan
cat ~/.banner.txt
printf '\033[0m' # back to normal
| कोड | रंग |
|---|---|
\033[31m |
लाल |
\033[32m |
हरा |
\033[33m |
पीला |
\033[35m |
मैजेंटा |
\033[36m |
सियान |
\033[1m |
बोल्ड |
आख़िरी \033[0m भूल गए, तो उसके बाद आप जो भी टाइप करेंगे वह रंगीन ही रहेगा।
PowerShell: $PROFILE
PowerShell शुरू होते समय $PROFILE वाली फ़ाइल चलाता है। अगर फ़ाइल अभी नहीं है, तो उसे बनाकर Notepad में खोलें:
if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -ItemType File -Force }
notepad $PROFILE
इसे जोड़कर सेव करें:
$banner = @'
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
'@
Write-Host $banner -ForegroundColor Cyan
@'और'@के बीच कुछ नहीं बदलता। आख़िरी'@लाइन की शुरुआत में होना चाहिए।- अगर नई विंडो कहे कि “इस सिस्टम पर स्क्रिप्ट चलाना बंद है”, तो अपने यूज़र के लिए execution policy बदलें:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned। █ ═जैसे ब्लॉक अक्षरों या ग़ैर-लैटिन टेक्स्ट (जैसे देवनागरी) वाले बैनर Windows PowerShell 5.1 में बिगड़ सकते हैं। Notepad में प्रोफ़ाइल को UTF-8 with BOM के रूप में सेव करें, या PowerShell 7 इस्तेमाल करें।
SSH लॉगिन स्क्रीन: /etc/motd
Linux सर्वर पर /etc/motd का टेक्स्ट हर SSH लॉगिन पर, जुड़ने वाले हर व्यक्ति को दिखता है।
sudo nano /etc/motd
बैनर पेस्ट करके सेव करें, अगले लॉगिन से वह दिखने लगेगा। बैनर में सर्वर का नाम रखने से प्रोडक्शन और स्टेजिंग में गड़बड़ी मुश्किल हो जाती है। आपको नहीं पता कि कौन-सा व्यक्ति कौन-सा टर्मिनल इस्तेमाल करता है, इसलिए ब्लॉक अक्षरों के बजाय Standard, Slant या Small जैसा ASCII फ़ॉन्ट चुनें। Ubuntu /etc/update-motd.d/ की स्क्रिप्ट से बने संदेश भी दिखाता है।
अपने CLI टूल में
Python या Node.js में लिखे टूल पर भी यही नियम लागू है: जब आउटपुट किसी फ़ाइल या दूसरे प्रोग्राम में जा रहा हो, तो बैनर न दिखाएँ।
import sys
BANNER = r"""
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
"""
if sys.stdout.isatty():
print(BANNER)
const banner = String.raw`
___ _____ __
| \| __\ \ / /
| |) | _| \ V /
|___/|___| \_/
`;
if (process.stdout.isTTY) console.log(banner);
स्ट्रिंग एस्केपिंग के बारे में ज़्यादा जानकारी README बैनर गाइड में है।
कौन-सा फ़ॉन्ट सबसे अच्छा है?
टर्मिनल आमतौर पर 80 कॉलम चौड़े होते हैं, और कई लोग विंडो को आधा-आधा बाँटते हैं, इसलिए 60 कॉलम या कम का बैनर लगभग हर जगह फ़िट होता है। लंबे नामों के लिए Small या Small Slant जैसा पतला फ़ॉन्ट चुनें। चौड़ाई की तुलना FIGlet फ़ॉन्ट कैसे चुनें में करें।
अगर आप
figletप्रोग्राम इंस्टॉल करते हैं, तो स्टार्टअप परfiglet -f slant "$(hostname)"जैसे कमांड से बैनर बना सकते हैं। लेकिन उसे हर मशीन पर इंस्टॉल करना पड़ता है, और जो फ़ॉन्ट साथ नहीं आते उन्हें अलग से डाउनलोड करना पड़ता है। तैयार बैनर पेस्ट करने में कोई इंस्टॉलेशन नहीं चाहिए।