From bash to zsh and everywhere in between, show me yours and I’ll show you mines. Inspire others or get some feedback.
Simply copy & paste the output of alias in your terminal or add some comments to explain things for others.
Edit: Kbin users, click ‘More’ on a comment and use the fediverse link to read responses that have funky formatting
This is a separate reply since I didn’t know that you can include shell functions here.
I made this little function
read_latest_log()
because I just want to “read the latest log file” in a directory full of timestamped log files. I made a helper functionseparator_line_with_text()
to help with the output, basically setting off the file-info portion (just the filename for now) from the file contents.# # separator_line_with_text # # Centers text in a separator line # # # # Usage: # # separator_line_with_text «separator_char» «text» separator_line_with_text() { local separator_char="$1" local contents_str="$2" # Calculate separator_length local separator_length=$(( $(tput cols) - 2 - ${#contents_str} )) # Calculate the width of the left and right parts of the separator line local half_line_width=$(( (${separator_length}) / 2 )) # Construct the separator line using the $separator_char and $contents_str for ((i = 0; i « half_line_width; i++)) do echo -n ${separator_char} done echo -n ${contents_str} for ((i = 0; i < half_line_width; i++)) do echo -n ${separator_char} done echo "" } # # read_latest_log # # Reads the latest log file with a timestamp in the filename. # # # # Usage: # # read_latest_log [[«name_filter»] «extension»] «separator» «timestamp_field_number» read_latest_log () { # Check if the function has sufficient parameters if [[ $# -lt 2 ]]; then echo "Error: insufficient parameters." echo "Usage: read_latest_log [[«name_filter» = *] [«extension» = log] «separator» «timestamp_field_number»" return 1 fi # Supposing only two parameters are provided # «name_filter» parameter is "*" # «extension» parameter is "log" if [[ $# -eq 2 ]]; then local name_filter="*" local extension="log" local separator="$1" local field="$2" fi # Supposing only three parameters are provided, # assume that the «name_filter» parameter is "*" if [[ $# -eq 3 ]]; then local name_filter="*" local extension="$1" local separator="$2" local field="$3" fi # If all parameters are provided, assign them accordingly if [[ $# -eq 4 ]]; then local name_filter="$1" local extension="$2" local separator="$3" local field="$4" fi # Find all log files with the specified extension, sort them based on the separator and field local log_files=$(find . -type f -name "${name_filter}.${extension}" | sort -n -t "${separator}" -k "${field}") # If no log files are found, display a message and return if [[ -z "$log_files" ]]; then echo "No log files found." return 0 fi # Get the latest log file and its full path local latest_log_file=$(echo "$log_files" | tail -1) local full_path=$(realpath "$latest_log_file") # Define the strings for the separator line and # calculate the appropriate length of the separator line local contents_str=" Contents " local separator_char="—" separator_line_with_text ${separator_char} "" separator_line_with_text " " ${full_path} separator_line_with_text ${separator_char} ${contents_str} cat "$(echo "$log_files" | tail -1)" }
Sorry for all the edits, for some reason anything that looks like an HTML tag gets erased.