Monday, April 11, 2022

256 color directory listing

 LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:';
export LS_COLORS

Randomly Colorful Unix Terminal Prompt

#!/usr/bin/env bash
### ./gen_prompt.sh
### Output: bash script that configures a randomly colorful prompt (PS1).
###   matt.a.feenstra@gmail.com
### For Example:
###   eval $(gen_prompt.sh)

echo 'PROMPT_DIRTRIM=4'

PS_STRING="'\[\033[38;5;$(shuf -i 27-231 -n 1)m\]\u\[\033[38;5;$(shuf -i 27-231 -n 1)m\]@\[\033[38;5;$(shuf -i 27-231 -n 1)m\]\h\[\033[38;5;$(shuf -i 27-231 -n 1)m\]:\[\033[38;5;$(shuf -i 27-231 -n 1)m\]\j\[\033[38;5;$(shuf -i 27-231 -n 1)m\]:\[\033[38;5;$(shuf -i 27-231 -n 1)m\]\w\[\033[38;5;$(shuf -i 27-231 -n 1)m\]\\$\[\033[00m\] '"

echo export PS1=$PS_STRING
 

Saturday, January 1, 2022

HOWTO: Use Ruby IO with shell execution (STDIN, STDOUT, STDERR, PID)


# 1. IO.popen
# Runs the specified command as a subprocess; the subprocess's standard
# input and output will be connected to the returned IO object. This
# allows you to provide STDIN input and get STDOUT output easily.
# Asynchronous (IO objects)
# Return: IO object, (IO#pid, IO#read)
# Docs: https://www.rubydoc.info/stdlib/core/IO.popen

io = IO.popen("echo 'hi'") # Or IO.popen(["echo", "hi"])
io = IO.popen(cmd)

IO.popen(["echo", "'hi'"]) do |io|
# ...
end


# 2. open3
# Runs the specified command as a subprocess; the subprocess's standard
# input, stdout, and stderr IO objects are available. There is also
# an "open4" gem to more easily get the PID of the child process.
# Synchronous (get strings) or Asynchronous (IO objects)
# Return: Strings (capture*) or IO objects (popen*)
# Docs: https://docs.ruby-lang.org/en/2.5.0/Open3.html#method-c-popen3

require 'open3'
stdin_io, stdout_io, stderr_io, process_waiter = Open3::popen3(cmd)
stdout_str, stderr_str, process_info = Open3::capture3(cmd)

require 'open4'
pid, stdin, stdout, stderr = Open4::popen4(cmd);


# Extra Advice - Exit Code
# $? which is the same as $CHILD_STATUS (if you require 'english')
# Accesses the status of the last system executed command if
# you use the backticks, system() or %x{}.
# You can then access the ``exitstatus'' and ``pid'' properties
# Docs: https://ruby-doc.org/core-2.7.1/Process/Status.html#method-i-exitstatus

$?.exitstatus

HOWTO: Shell redirection (pipe) and output into Ruby scripts

    Ruby syntax is a little different than most programming languages.  However I have found that it is worth the time and effort required in learning the style.  Here is an easy way to use Ruby and Linux Bash shell seamlessly through redirection, giving a world of capabilities, simply:


$ echo 'stuff' | ruby -e 'puts "this -> #{ARGF.read.chomp} <- is it."'
 

this -> stuff <- is it.
 

$


    Here we see the ARGF constant is assigned data from the left hand side as a String:

 

$ echo 'stuff' | ruby -e 'puts "this -> #{ARGF.read.class} <- is it."'


this -> String <- is it.


$

That's all there is to it!  Hope you've learned something, and I welcome your comments.  Have a great day!


--Matt