210 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Markdown
		
	
	
| ---
 | ||
| title: Bat как замена для cat
 | ||
| description: 
 | ||
| published: true
 | ||
| date: 2023-11-15T18:07:37.064Z
 | ||
| tags: 
 | ||
| editor: markdown
 | ||
| dateCreated: 2023-11-15T18:07:37.064Z
 | ||
| ---
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| Знакомлю вас с утилитой командной строки, которая мне очень понравилась. Речь пойдёт про bat, аналоге cat, только с подсветкой синтаксиса и не только.
 | ||
| 
 | ||
| Лично я утилиту cat использую постоянно. Сформировалась привычка при поиске чего-то делать сначала cat, потом grep. Например:
 | ||
| 
 | ||
| `cat /var/log/messages | grep kernel`
 | ||
| 
 | ||
| По идее, логичнее и проще сделать так:
 | ||
| 
 | ||
| `egrep "kernel" /var/log/messages`
 | ||
| 
 | ||
| Но я привык к первому варианту и cat использую постоянно. И при грепанье, и просто при просмотре чего-то в консоли. Перед тем, как что-то скопировать из файла, вывожу через cat в консоль.
 | ||
| 
 | ||
| Bat очень классно подсвечивает вывод в консоли. Нет смысла рассказывать, на картинке к посту все и так видно:
 | ||
| 
 | ||
| `bat /etc/hosts`
 | ||
| 
 | ||
| 
 | ||
| Репозиторий утилиты - https://github.com/sharkdp/bat. В Debian/Ubuntu bat ставится из стандартных реп:
 | ||
| ```
 | ||
| apt install bat
 | ||
| ln -s /usr/bin/batcat /usr/bin/bat
 | ||
| ```
 | ||
| Если нет в репах, то качаем с репозитория и устанавливаем.
 | ||
| 
 | ||
| ```
 | ||
| wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-musl_0.18.2_amd64.deb
 | ||
| dpkg -i bat-musl_0.18.2_amd64.deb
 | ||
| ```
 | ||
| В Centos 8 (на 7 не заработает из-за устаревших пакетов) и форках придется бинарник качать:
 | ||
| ```
 | ||
| wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz
 | ||
| tar xzvf bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz
 | ||
| cd bat-v0.18.2-x86_64-unknown-linux-gnu
 | ||
| cp bat /usr/bin/
 | ||
| ```
 | ||
| 
 | ||
| ________________________
 | ||
| Добавлю от себя, на centos вылетела ошибка
 | ||
| ```
 | ||
| /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./bat)
 | ||
| ```
 | ||
| 
 | ||
| Поэтому пришлось найти решение вот такое.
 | ||
| ```bash
 | ||
| #!/bin/sh
 | ||
|  
 | ||
| red=`tput setaf 1`
 | ||
| green=`tput setaf 2`
 | ||
| bold=`tput bold`
 | ||
| reset=`tput sgr0`
 | ||
|  
 | ||
| echo ""
 | ||
| echo "${bold}${green}Installing the latest CentOS release version of bat command from GitHub...${reset}"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "${bold}Note${reset}: For more information, please see https://github.com/sharkdp/bat."
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Finding the latest version tag from Github..."
 | ||
|  
 | ||
| BAT_VERSION=$(curl --silent "https://api.github.com/repos/sharkdp/bat/releases/latest" | grep -Eo '"tag_name": "v(.*)"' | sed -E 's/.*"([^"]+)".*/\1/')
 | ||
| BAT_RELEASE="bat-$BAT_VERSION-x86_64-unknown-linux-musl"
 | ||
| BAT_ARCHIVE="$BAT_RELEASE.tar.gz"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Version ${bold}$BAT_VERSION${reset} found, downloading ${bold}$BAT_ARCHIVE${reset} from GitHub..."
 | ||
|  
 | ||
| curl -sOL "https://github.com/sharkdp/bat/releases/download/$BAT_VERSION/$BAT_ARCHIVE"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Unarchiving ${bold}$BAT_ARCHIVE${reset} to ${bold}$HOME/$BAT_RELEASE${reset}..."
 | ||
|  
 | ||
| tar xzvf $BAT_ARCHIVE -C $HOME/
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Copying executable to ${bold}/usr/local/bin/bat${reset}..."
 | ||
|  
 | ||
| sudo sh -c "cp $HOME/$BAT_RELEASE/bat /usr/local/bin/bat"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Removing ${bold}$BAT_ARCHIVE${reset} and cleaning up..."
 | ||
|  
 | ||
| rm $BAT_ARCHIVE
 | ||
|  
 | ||
| unset BAT_ARCHIVE
 | ||
| unset BAT_RELEASE
 | ||
| unset BAT_VERSION
 | ||
|  
 | ||
| if command -v bat &> /dev/null
 | ||
| then
 | ||
|   echo ""
 | ||
|   echo "${bold}${green}Finished installing $(bat --version).${reset}"
 | ||
| else
 | ||
|   echo ""
 | ||
|   echo "${bold}${red}Installation failed! Please examine this script and try steps manually.${reset}"
 | ||
|   exit 1
 | ||
| fi
 | ||
| ```
 | ||
| 
 | ||
| 
 | ||
| Знакомлю вас с утилитой командной строки, которая мне очень понравилась. Речь пойдёт про bat, аналоге cat, только с подсветкой синтаксиса и не только.
 | ||
| 
 | ||
| Лично я утилиту cat использую постоянно. Сформировалась привычка при поиске чего-то делать сначала cat, потом grep. Например:
 | ||
| 
 | ||
| `cat /var/log/messages | grep kernel`
 | ||
| 
 | ||
| По идее, логичнее и проще сделать так:
 | ||
| 
 | ||
| `egrep "kernel" /var/log/messages`
 | ||
| 
 | ||
| Но я привык к первому варианту и cat использую постоянно. И при грепанье, и просто при просмотре чего-то в консоли. Перед тем, как что-то скопировать из файла, вывожу через cat в консоль.
 | ||
| 
 | ||
| Bat очень классно подсвечивает вывод в консоли. Нет смысла рассказывать, на картинке к посту все и так видно:
 | ||
| 
 | ||
| `bat /etc/hosts`
 | ||
| 
 | ||
| Репозиторий утилиты - https://github.com/sharkdp/bat. В Debian/Ubuntu bat ставится из стандартных реп:
 | ||
| ```
 | ||
| apt install bat
 | ||
| ln -s /usr/bin/batcat /usr/bin/bat
 | ||
| ```
 | ||
| Если нет в репах, то качаем с репозитория и устанавливаем.
 | ||
| 
 | ||
| ```
 | ||
| wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-musl_0.18.2_amd64.deb
 | ||
| dpkg -i bat-musl_0.18.2_amd64.deb
 | ||
| ```
 | ||
| 
 | ||
| В Centos 8 (на 7 не заработает из-за устаревших пакетов) и форках придется бинарник качать:
 | ||
| ```
 | ||
| wget https://github.com/sharkdp/bat/releases/download/v0.18.2/bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz
 | ||
| tar xzvf bat-v0.18.2-x86_64-unknown-linux-gnu.tar.gz
 | ||
| cd bat-v0.18.2-x86_64-unknown-linux-gnu
 | ||
| cp bat /usr/bin/
 | ||
| ```
 | ||
| 
 | ||
| ________________________
 | ||
| Добавлю от себя, на centos вылетела ошибка
 | ||
| ```
 | ||
| /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./bat)
 | ||
| ```
 | ||
| 
 | ||
| Поэтому пришлось найти решение вот такое.
 | ||
| ```bash
 | ||
| #!/bin/sh
 | ||
|  
 | ||
| red=`tput setaf 1`
 | ||
| green=`tput setaf 2`
 | ||
| bold=`tput bold`
 | ||
| reset=`tput sgr0`
 | ||
|  
 | ||
| echo ""
 | ||
| echo "${bold}${green}Installing the latest CentOS release version of bat command from GitHub...${reset}"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "${bold}Note${reset}: For more information, please see https://github.com/sharkdp/bat."
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Finding the latest version tag from Github..."
 | ||
|  
 | ||
| BAT_VERSION=$(curl --silent "https://api.github.com/repos/sharkdp/bat/releases/latest" | grep -Eo '"tag_name": "v(.*)"' | sed -E 's/.*"([^"]+)".*/\1/')
 | ||
| BAT_RELEASE="bat-$BAT_VERSION-x86_64-unknown-linux-musl"
 | ||
| BAT_ARCHIVE="$BAT_RELEASE.tar.gz"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Version ${bold}$BAT_VERSION${reset} found, downloading ${bold}$BAT_ARCHIVE${reset} from GitHub..."
 | ||
|  
 | ||
| curl -sOL "https://github.com/sharkdp/bat/releases/download/$BAT_VERSION/$BAT_ARCHIVE"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Unarchiving ${bold}$BAT_ARCHIVE${reset} to ${bold}$HOME/$BAT_RELEASE${reset}..."
 | ||
|  
 | ||
| tar xzvf $BAT_ARCHIVE -C $HOME/
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Copying executable to ${bold}/usr/local/bin/bat${reset}..."
 | ||
|  
 | ||
| sudo sh -c "cp $HOME/$BAT_RELEASE/bat /usr/local/bin/bat"
 | ||
|  
 | ||
| echo ""
 | ||
| echo "Removing ${bold}$BAT_ARCHIVE${reset} and cleaning up..."
 | ||
|  
 | ||
| rm $BAT_ARCHIVE
 | ||
|  
 | ||
| unset BAT_ARCHIVE
 | ||
| unset BAT_RELEASE
 | ||
| unset BAT_VERSION
 | ||
|  
 | ||
| if command -v bat &> /dev/null
 | ||
| then
 | ||
|   echo ""
 | ||
|   echo "${bold}${green}Finished installing $(bat --version).${reset}"
 | ||
| else
 | ||
|   echo ""
 | ||
|   echo "${bold}${red}Installation failed! Please examine this script and try steps manually.${reset}"
 | ||
|   exit 1
 | ||
| fi
 | ||
| ``` |