Today I Learned

Bash

<TIL

Diff in one line from two files

Have you ever done something like this?

    $ grep somestring file1 > /tmp/a
    $ grep somestring file2 > /tmp/b
    $ diff /tmp/a /tmp/b

That works, but instead you can write:

diff <(grep somestring file1) <(grep somestring file2)

Printing from command line

Tips:

An example of command:

$ lp -d HP_Deskjet -n 50 -o OutputMode=FastDraft Documents/sablon_congres.pdf

Add suffix to filename

e.g to change the name of a file from old.name to old.name_backup: $ mv old.name{,_backup}

Saying Yes

$ yes | rm -r ~/some/dir

source

$ printenv | less

source

Check if a command succeeded in bashscript

You could evaluate the exit status:

some_command
if [ $? -neq 0 ]; then
    echo "FAIL"
fi

Or, the most simple way

if some_command; then
    echo "OK"
else
   echo "FAIL"
fi

source

ZSH suffix aliases

With suffix aliases, you can launch files with a specific extension (or suffix) in your favorite tool. To register a suffix alias, we use the alias -s extension=name-of-the-tool pattern.

alias -s pdf=zathura
alias -s {ape,avi,flv,m4a,mkv,mov,mp3,mp4,mpeg,mpg,ogg,ogm,wav,webm}=mpv
alias -s {jpg,jpeg,png}=feh
alias -s git='git clone'

source

ZSH global aliases

A global alias is aggressive. Once registered, it replaces all occurrences of the alias name with the specified command. The definition follows the pattern

alias -g NF='./*(oc[1])' This points to the newest file/dir in my current dir, and it is very easy for me to untar a downloaded file and then cd into it without caring about the name of the file/dir. tar xf NF; cd NF source source

Mount folder/filesystem through SSH

Install SSHFS.

sshfs name@server:/path/to/folder /path/to/mount/point

source

Easy access to often executed commands

When using reverse-i-search you have to type some part of the command that you want to retrieve. It’s possible to label your commands and access them easily by pressing ^R and typing the label (should be short and descriptive).

$ some_very_long_and_complex_command # label source

Show apps that use internet connection at the moment

lsof -P -i -n source

Save command output to image

$ some_command | convert label:@- some_name.png source

Create multiple directory hierarchies in one shot:

$ mkdir -p first/second/third source