SlideShare a Scribd company logo
1 of 26
Download to read offline
Make the prompt great again
Jiri Tyr & Vladimir Babichev
What makes the command prompt great?
● It provides useful information
● It looks nice
● It's fast
Shell frameworks
● Bash
○ Bash Infinity
○ Bash-it
○ ...
● ZSH
○ Oh My ZSH
○ Prezto
○ ...
All written in shell = slow!
How to make it run faster?
Write it in Go!
We would like to introduce you...
GBTGBT
GBT = Go Bullet Train
Highly configurable prompt builder for Bash and ZSH written in Go.
It's inspired by the Bullet Train theme for Oh My ZSH framework.
GBT
GBT anatomy
GBT anatomy
GBT anatomy
GBT
● 10 cars
○ Custom, Dir, ExecTime, Git, Hostname, Os, PyVirtEnv, Sign, Status, Time
● Over 200 environment variables
● Nerd fonts
● Packages for multiple platforms
○ Linux
■ RPM repo ... yum install gbt
■ DEB repo ... apt-get install gbt
■ AUR ... yaourt -S gbt
○ Mac
■ Brew ... brew install gbt
○ Android
■ Termux ... apt install gbt
GBT on Android
● Install Termux and Termux:Styling
● Select font
● Install and setup GBT
apt update
apt install gbt
PS1='$(gbt $?)'
Demo
Benchmark
cat /tmp/test.sh
BRANCH="$(git symbolic-ref HEAD)"
[ -z "$(git status --porcelain)" ] && DIRTY_ICON='%{e[38;5;2m%}✔' ||
DIRTY_ICON='%{e[38;5;1m%}✘'
[[ "$(git rev-list --count HEAD..@{upstream})" == '0' ]] && AHEAD_ICON='' || AHEAD_ICON=' ⬆'
[[ "$(git rev-list --count @{upstream}..HEAD)" == '0' ]] && BEHIND_ICON='' || BEHIND_ICON=' ⬇'
echo -en "%{e[0m%}%{e[48;5;7m%}%{e[38;5;0m%}
%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m%}%{e[38;5;0m%}
%{e[48;5;7m%}%{e[38;5;0m%}${BRANCH##*/}%{e[48;5;7m%}%{e[38;5;0m%}
%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m%}$DIRTY_ICON%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m%
}%{e[38;5;0m%}%{e[48;5;7m%}%{e[38;5;0m%}$AHEAD_ICON%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m
%}%{e[38;5;0m%}$BEHIND_ICON%{e[48;5;7m%}%{e[38;5;0m%} %{e[0m%}"
Benchmark
# Execution of the testing script by Bash
for N in $(seq 10); do time (for M in $(seq 100); do bash /tmp/test.sh 1>/dev/null 2>&1; done)
done 2>&1 | awk '{ total_cpu += $19; total_time += $21 } END { print "Avg CPU:
"total_cpu/NR"%; Avg time: "total_time/NR"s" }'
Avg CPU: 102%; Avg time: 1.9407s
# Execution of the testing script by ZSH
for N in $(seq 10); do time (for M in $(seq 100); do zsh /tmp/test.sh 1>/dev/null 2>&1; done)
done 2>&1 | awk '{ total_cpu += $19; total_time += $21 } END { print "Avg CPU:
"total_cpu/NR"%; Avg time: "total_time/NR"s" }'
Avg CPU: 103%; Avg time: 1.9079s
# Execution of GBT
for N in $(seq 10); do time (for M in $(seq 100); do GBT_SHELL='zsh' GBT_CARS='Git' gbt
1>/dev/null 2>&1; done) done 2>&1 | awk '{ total_cpu += $18; total_time += $20 } END { print
"Avg CPU: "total_cpu/NR"%; Avg time: "total_time/NR"s" }'
Avg CPU: 115%; Avg time: 1.8817s
OS Icons
Prompt forwarding
Demo
How does it work?
ssh myserver -t "
echo "PS1='$(gbt)'" > /tmp/.gbt;
bash --rcfile /tmp/.gbt;
rm -f /tmp/.gbt"
Features
● GBT executes only locally
● GBT generates a string which is then forwarded to a remote machine
● Supports forwarding of local aliases
● Integrates with SSH, Docker, Vagrant, MySQL
● Supports su and sudo
Limitations
● Works only with Bash
● Doesn’t support ExecTime, Git, PyVirtEnv cars
Contribution and support
Contribution and support
● Contribute
○ Create new themes (e.g. solarized)
○ Create new cars
■ SCM (e.g. Mercurial)
■ CPU load
■ ...
○ Optimize sequence string produced by GBT
○ Make tests running in parallel
● Spread the word
○ Thanks Gareth Rushgrove for advertising it in the next DevOps Weekly ;o)
● Star the project on Github
https://github.com/jtyr/gbt
Thank you for your attention!
Questions?

More Related Content

What's hot

Владимир Мигуро "Дао Node.js"
Владимир Мигуро "Дао Node.js"Владимир Мигуро "Дао Node.js"
Владимир Мигуро "Дао Node.js"
EPAM Systems
 
GoLang & GoatCore
GoLang & GoatCore GoLang & GoatCore
GoLang & GoatCore
Sebastian Pożoga
 
Open Social Data (Jaca), Alejandro Rivero
Open Social Data (Jaca), Alejandro RiveroOpen Social Data (Jaca), Alejandro Rivero
Open Social Data (Jaca), Alejandro Rivero
Aragón Open Data
 
Highlights of Go 1.1
Highlights of Go 1.1Highlights of Go 1.1
Highlights of Go 1.1
Cloudflare
 
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
Technopark
 
Gitosis on Mac OS X Server
Gitosis on Mac OS X ServerGitosis on Mac OS X Server
Gitosis on Mac OS X Server
Yasuhiro Asaka
 
37562259 top-consuming-process
37562259 top-consuming-process37562259 top-consuming-process
37562259 top-consuming-process
skumner
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites python
Fabiano Weimar
 

What's hot (20)

Владимир Мигуро "Дао Node.js"
Владимир Мигуро "Дао Node.js"Владимир Мигуро "Дао Node.js"
Владимир Мигуро "Дао Node.js"
 
От sysV к systemd
От sysV к systemdОт sysV к systemd
От sysV к systemd
 
GoLang & GoatCore
GoLang & GoatCore GoLang & GoatCore
GoLang & GoatCore
 
Highlights of Go 1.1
Highlights of Go 1.1Highlights of Go 1.1
Highlights of Go 1.1
 
Open Social Data (Jaca), Alejandro Rivero
Open Social Data (Jaca), Alejandro RiveroOpen Social Data (Jaca), Alejandro Rivero
Open Social Data (Jaca), Alejandro Rivero
 
Note
NoteNote
Note
 
Jk rubyslava 25
Jk rubyslava 25Jk rubyslava 25
Jk rubyslava 25
 
The Practice of Alluxio in Near Real-Time Data Platform at VIPShop [Chinese]
The Practice of Alluxio in Near Real-Time Data Platform at VIPShop [Chinese]The Practice of Alluxio in Near Real-Time Data Platform at VIPShop [Chinese]
The Practice of Alluxio in Near Real-Time Data Platform at VIPShop [Chinese]
 
Highlights of Go 1.1
Highlights of Go 1.1Highlights of Go 1.1
Highlights of Go 1.1
 
Highload осень 2012 лекция 1
Highload осень 2012 лекция 1Highload осень 2012 лекция 1
Highload осень 2012 лекция 1
 
Odoo Online platform: architecture and challenges
Odoo Online platform: architecture and challengesOdoo Online platform: architecture and challenges
Odoo Online platform: architecture and challenges
 
Ac cuda c_1
Ac cuda c_1Ac cuda c_1
Ac cuda c_1
 
Gitosis on Mac OS X Server
Gitosis on Mac OS X ServerGitosis on Mac OS X Server
Gitosis on Mac OS X Server
 
37562259 top-consuming-process
37562259 top-consuming-process37562259 top-consuming-process
37562259 top-consuming-process
 
Dicas e truques de otimização de websites python
Dicas e truques de otimização de websites pythonDicas e truques de otimização de websites python
Dicas e truques de otimização de websites python
 
Alluxio in MOMO
Alluxio in MOMOAlluxio in MOMO
Alluxio in MOMO
 
UDPSRC GStreamer Plugin Session VIII
UDPSRC GStreamer Plugin Session VIIIUDPSRC GStreamer Plugin Session VIII
UDPSRC GStreamer Plugin Session VIII
 
Hackerspace PostgreSQL Atolyesi - 3
Hackerspace PostgreSQL Atolyesi - 3Hackerspace PostgreSQL Atolyesi - 3
Hackerspace PostgreSQL Atolyesi - 3
 
Installation of application server 10g in red hat 4
Installation of application server 10g in red hat 4Installation of application server 10g in red hat 4
Installation of application server 10g in red hat 4
 
System ctl file that is created at time of installation
System ctl file that is created at time of installationSystem ctl file that is created at time of installation
System ctl file that is created at time of installation
 

Similar to Make the prompt great again

Biicode OpenExpoDay
Biicode OpenExpoDayBiicode OpenExpoDay
Biicode OpenExpoDay
fcofdezc
 
Unix is my IDE
Unix is my IDEUnix is my IDE
Unix is my IDE
tkramar
 

Similar to Make the prompt great again (20)

One-Liners to Rule Them All
One-Liners to Rule Them AllOne-Liners to Rule Them All
One-Liners to Rule Them All
 
Roll your own toy unix clone os
Roll your own toy unix clone osRoll your own toy unix clone os
Roll your own toy unix clone os
 
Metasepi team meeting #7: Snatch application on tiny OS
Metasepi team meeting #7: Snatch application on tiny OSMetasepi team meeting #7: Snatch application on tiny OS
Metasepi team meeting #7: Snatch application on tiny OS
 
Qt native built for raspberry zero
Qt native built for  raspberry zeroQt native built for  raspberry zero
Qt native built for raspberry zero
 
The Fairy Tale of the One Command Build Script
The Fairy Tale of the One Command Build ScriptThe Fairy Tale of the One Command Build Script
The Fairy Tale of the One Command Build Script
 
The hacker choice
The hacker choiceThe hacker choice
The hacker choice
 
DEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them allDEF CON 23 - Phil Polstra - one device to pwn them all
DEF CON 23 - Phil Polstra - one device to pwn them all
 
PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22
 
Basicsof c make and git for a hello qt application
Basicsof c make and git for a hello qt applicationBasicsof c make and git for a hello qt application
Basicsof c make and git for a hello qt application
 
Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)
 
Perl - laziness, impatience, hubris, and one liners
Perl - laziness, impatience, hubris, and one linersPerl - laziness, impatience, hubris, and one liners
Perl - laziness, impatience, hubris, and one liners
 
Kernel Recipes 2016 - Speeding up development by setting up a kernel build farm
Kernel Recipes 2016 - Speeding up development by setting up a kernel build farmKernel Recipes 2016 - Speeding up development by setting up a kernel build farm
Kernel Recipes 2016 - Speeding up development by setting up a kernel build farm
 
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
 
Gpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cudaGpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cuda
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mruby
 
Biicode OpenExpoDay
Biicode OpenExpoDayBiicode OpenExpoDay
Biicode OpenExpoDay
 
Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3Tomáš Čorej: Configuration management & CFEngine3
Tomáš Čorej: Configuration management & CFEngine3
 
Description of GRUB 2
Description of GRUB 2Description of GRUB 2
Description of GRUB 2
 
Unix is my IDE
Unix is my IDEUnix is my IDE
Unix is my IDE
 
Modern javascript localization with c-3po and the good old gettext
Modern javascript localization with c-3po and the good old gettextModern javascript localization with c-3po and the good old gettext
Modern javascript localization with c-3po and the good old gettext
 

More from jtyr

More from jtyr (13)

Ansible Inventory Plugins
Ansible Inventory PluginsAnsible Inventory Plugins
Ansible Inventory Plugins
 
Ansible Callback Plugins
Ansible Callback PluginsAnsible Callback Plugins
Ansible Callback Plugins
 
Managing VMware VMs with Ansible
Managing VMware VMs with AnsibleManaging VMware VMs with Ansible
Managing VMware VMs with Ansible
 
How does Ansible's agentless architecture work?
How does Ansible's agentless architecture work?How does Ansible's agentless architecture work?
How does Ansible's agentless architecture work?
 
Variable precedence: Where should I put a variable?
Variable precedence: Where should I put a variable?Variable precedence: Where should I put a variable?
Variable precedence: Where should I put a variable?
 
Managing multiple environments with Ansible
Managing multiple environments with AnsibleManaging multiple environments with Ansible
Managing multiple environments with Ansible
 
Jinja2 filters
Jinja2 filtersJinja2 filters
Jinja2 filters
 
Templating in ansible
Templating in ansibleTemplating in ansible
Templating in ansible
 
Development of Ansible modules
Development of Ansible modulesDevelopment of Ansible modules
Development of Ansible modules
 
Best practices for ansible roles development
Best practices for ansible roles developmentBest practices for ansible roles development
Best practices for ansible roles development
 
Overcoming problems of the standard Ansible inventory file
Overcoming problems of the standard Ansible inventory fileOvercoming problems of the standard Ansible inventory file
Overcoming problems of the standard Ansible inventory file
 
Automation and Ansible
Automation and AnsibleAutomation and Ansible
Automation and Ansible
 
LEGO IR Controller
LEGO IR ControllerLEGO IR Controller
LEGO IR Controller
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreel
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 

Make the prompt great again

  • 1. Make the prompt great again Jiri Tyr & Vladimir Babichev
  • 2. What makes the command prompt great? ● It provides useful information ● It looks nice ● It's fast
  • 3. Shell frameworks ● Bash ○ Bash Infinity ○ Bash-it ○ ... ● ZSH ○ Oh My ZSH ○ Prezto ○ ... All written in shell = slow!
  • 4. How to make it run faster?
  • 6. We would like to introduce you... GBTGBT
  • 7.
  • 8. GBT = Go Bullet Train Highly configurable prompt builder for Bash and ZSH written in Go. It's inspired by the Bullet Train theme for Oh My ZSH framework.
  • 9. GBT
  • 13. GBT ● 10 cars ○ Custom, Dir, ExecTime, Git, Hostname, Os, PyVirtEnv, Sign, Status, Time ● Over 200 environment variables ● Nerd fonts ● Packages for multiple platforms ○ Linux ■ RPM repo ... yum install gbt ■ DEB repo ... apt-get install gbt ■ AUR ... yaourt -S gbt ○ Mac ■ Brew ... brew install gbt ○ Android ■ Termux ... apt install gbt
  • 14. GBT on Android ● Install Termux and Termux:Styling ● Select font ● Install and setup GBT apt update apt install gbt PS1='$(gbt $?)'
  • 15. Demo
  • 16. Benchmark cat /tmp/test.sh BRANCH="$(git symbolic-ref HEAD)" [ -z "$(git status --porcelain)" ] && DIRTY_ICON='%{e[38;5;2m%}✔' || DIRTY_ICON='%{e[38;5;1m%}✘' [[ "$(git rev-list --count HEAD..@{upstream})" == '0' ]] && AHEAD_ICON='' || AHEAD_ICON=' ⬆' [[ "$(git rev-list --count @{upstream}..HEAD)" == '0' ]] && BEHIND_ICON='' || BEHIND_ICON=' ⬇' echo -en "%{e[0m%}%{e[48;5;7m%}%{e[38;5;0m%} %{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m%}%{e[38;5;0m%} %{e[48;5;7m%}%{e[38;5;0m%}${BRANCH##*/}%{e[48;5;7m%}%{e[38;5;0m%} %{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m%}$DIRTY_ICON%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m% }%{e[38;5;0m%}%{e[48;5;7m%}%{e[38;5;0m%}$AHEAD_ICON%{e[48;5;7m%}%{e[38;5;0m%}%{e[48;5;7m %}%{e[38;5;0m%}$BEHIND_ICON%{e[48;5;7m%}%{e[38;5;0m%} %{e[0m%}"
  • 17. Benchmark # Execution of the testing script by Bash for N in $(seq 10); do time (for M in $(seq 100); do bash /tmp/test.sh 1>/dev/null 2>&1; done) done 2>&1 | awk '{ total_cpu += $19; total_time += $21 } END { print "Avg CPU: "total_cpu/NR"%; Avg time: "total_time/NR"s" }' Avg CPU: 102%; Avg time: 1.9407s # Execution of the testing script by ZSH for N in $(seq 10); do time (for M in $(seq 100); do zsh /tmp/test.sh 1>/dev/null 2>&1; done) done 2>&1 | awk '{ total_cpu += $19; total_time += $21 } END { print "Avg CPU: "total_cpu/NR"%; Avg time: "total_time/NR"s" }' Avg CPU: 103%; Avg time: 1.9079s # Execution of GBT for N in $(seq 10); do time (for M in $(seq 100); do GBT_SHELL='zsh' GBT_CARS='Git' gbt 1>/dev/null 2>&1; done) done 2>&1 | awk '{ total_cpu += $18; total_time += $20 } END { print "Avg CPU: "total_cpu/NR"%; Avg time: "total_time/NR"s" }' Avg CPU: 115%; Avg time: 1.8817s
  • 20. Demo
  • 21. How does it work? ssh myserver -t " echo "PS1='$(gbt)'" > /tmp/.gbt; bash --rcfile /tmp/.gbt; rm -f /tmp/.gbt"
  • 22. Features ● GBT executes only locally ● GBT generates a string which is then forwarded to a remote machine ● Supports forwarding of local aliases ● Integrates with SSH, Docker, Vagrant, MySQL ● Supports su and sudo
  • 23. Limitations ● Works only with Bash ● Doesn’t support ExecTime, Git, PyVirtEnv cars
  • 25. Contribution and support ● Contribute ○ Create new themes (e.g. solarized) ○ Create new cars ■ SCM (e.g. Mercurial) ■ CPU load ■ ... ○ Optimize sequence string produced by GBT ○ Make tests running in parallel ● Spread the word ○ Thanks Gareth Rushgrove for advertising it in the next DevOps Weekly ;o) ● Star the project on Github https://github.com/jtyr/gbt
  • 26. Thank you for your attention! Questions?