Linux/Unix desktop fun: sl – a mirror version of ls

One of the most common mistakes is typing sl instead of ls command. I set up an alias, i.e., alias sl=ls; but then you may miss out the steam train with a whistle.

ADVERTISEMENTS



sl is a joke software or classic UNIX game. It is a steam locomotive runs across your screen if you type “sl” (Steam Locomotive) instead of “ls” by mistake. Now there is a twist to older sl command.



sl – a mirror version of ls

From the blog post:

I didn’t like it and made another program of the same name. My sl just mirrors the output of ls. It accepts most ls(1) arguments and is best enjoyed with -l.

source code

The program is written in the bash shell. Here is the source code:

#!/bin/bash # sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 LEN =$ ( ls "$@" | wc -L ) # get the length of the longest line ls "$@" | rev | while read -r line do printf "% ${LEN} . ${LEN} s\

" " $line " | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' done #!/bin/bash # sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 LEN=$(ls "$@" |wc -L) # get the length of the longest line ls "$@" | rev | while read -r line do printf "%${LEN}.${LEN}s\

" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' done

Run it as follows

First create ~/bin/ directory using the mkdir command:

$ mkdir ~/bin/

Next, store above source code. cd into the ~/bin/ using the cd command:

$ cd ~/bin/

$ vi sl

Save and close the file. Set permission on your shell script using the chmod command:

$ chmod +x sl

Test it:

$ ls -l

$ ./sl -l

Sample outputs from sl command:

txt.qaf.detaeler.km >- txt.smc.detaeler.km 05: 41 32 ceD 91 keviv keviv 1 xwrxwrxwrl qaf.detaeler.km 72 : 41 11 ceD 709 keviv keviv 1 x-rx-rxwr- etalpmet.qaf.detaeler.km 34 : 51 61 voN 121 keviv keviv 1 --r--r-wr- txt.qaf.detaeler.km 85 :00 01 beF 014 keviv keviv 1 --r--r-wr- spit.detaeler.km 94 : 41 32 ceD 709 keviv keviv 1 x-rx-rxwr- etalpmet.spit.detaeler.km 84 : 41 32 ceD 121 keviv keviv 1 --r--r-wr- ssr.setadpu.km 95 :00 7 naJ 618 keviv keviv 1 x-rx-rxwr- etalpmet.ssr.setadpu.km 24 : 22 2 naJ 463 keviv keviv 1 --r--r-wr- txt.ssr.setadpu.km 22 : 12 02 beF 4221 keviv keviv 1 --r--r-wr- hs.014.xnign 43 : 11 6 naJ 684 keviv keviv 1 x-rx-rxwr- hs.103.moc.tfarcxin 5102 52 rpA 631 keviv keviv 1 x-rx-rxwr- etacsufbo 5102 91 luJ 9931 keviv keviv 1 --r--r-wr- hs.lapyap 84 : 41 02 ceD 865 keviv keviv 1 x-rx-rxwr- txt.lapyap 7102 03 naJ 4131 keviv keviv 1 --r--r-wr- hs.daolputsop 3102 13 ceD 135 keviv keviv 1 x-rx-rxwr- hs.daolpuerp 3102 13 ceD 734 keviv keviv 1 x-rx-rxwr- hs.niamod.eralfduolc.lla.egrup 7102 81 yaM 6401 keviv keviv 1 x-rx-rxwr- nohtyp 05: 20 5 beF 6904 keviv keviv 2 x-rx-rxwrd ls 92 : 61 13 raM 672 keviv keviv 1 x-rx-rxwr- resu.tidder.ecruos 7102 42 naJ 911 keviv keviv 1 x-rx-rxwr- 014.deteled.sgat 95 : 32 02 raM 97732 keviv keviv 1 --r--r-wr- hs.teewt 53 : 10 62 naJ 58653 keviv keviv 1 x-rx-rxwr- tob-rettiwt 90 : 32 4 beF 6904 keviv keviv 2 x-rx-rxwrd smc.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr- qaf.elif.daolpu 7102 9 nuJ 807 keviv keviv 1 x-rx-rxwr- pit.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr- hs.egamidaolpu 3102 81 tcO 3911 keviv keviv 1 x-rx-rxwr- nalnoekaw 00: 41 21 tcO 1325 keviv keviv 1 x-rx-rxwr- 2x 7102 52 nuJ 017 keviv keviv 1 x-rx-rxwr- txt.qaf.detaeler.km >- txt.smc.detaeler.km 05:41 32 ceD 91 keviv keviv 1 xwrxwrxwrl qaf.detaeler.km 72:41 11 ceD 709 keviv keviv 1 x-rx-rxwr- etalpmet.qaf.detaeler.km 34:51 61 voN 121 keviv keviv 1 --r--r-wr- txt.qaf.detaeler.km 85:00 01 beF 014 keviv keviv 1 --r--r-wr- spit.detaeler.km 94:41 32 ceD 709 keviv keviv 1 x-rx-rxwr- etalpmet.spit.detaeler.km 84:41 32 ceD 121 keviv keviv 1 --r--r-wr- ssr.setadpu.km 95:00 7 naJ 618 keviv keviv 1 x-rx-rxwr- etalpmet.ssr.setadpu.km 24:22 2 naJ 463 keviv keviv 1 --r--r-wr- txt.ssr.setadpu.km 22:12 02 beF 4221 keviv keviv 1 --r--r-wr- hs.014.xnign 43:11 6 naJ 684 keviv keviv 1 x-rx-rxwr- hs.103.moc.tfarcxin 5102 52 rpA 631 keviv keviv 1 x-rx-rxwr- etacsufbo 5102 91 luJ 9931 keviv keviv 1 --r--r-wr- hs.lapyap 84:41 02 ceD 865 keviv keviv 1 x-rx-rxwr- txt.lapyap 7102 03 naJ 4131 keviv keviv 1 --r--r-wr- hs.daolputsop 3102 13 ceD 135 keviv keviv 1 x-rx-rxwr- hs.daolpuerp 3102 13 ceD 734 keviv keviv 1 x-rx-rxwr- hs.niamod.eralfduolc.lla.egrup 7102 81 yaM 6401 keviv keviv 1 x-rx-rxwr- nohtyp 05:20 5 beF 6904 keviv keviv 2 x-rx-rxwrd ls 92:61 13 raM 672 keviv keviv 1 x-rx-rxwr- resu.tidder.ecruos 7102 42 naJ 911 keviv keviv 1 x-rx-rxwr- 014.deteled.sgat 95:32 02 raM 97732 keviv keviv 1 --r--r-wr- hs.teewt 53:10 62 naJ 58653 keviv keviv 1 x-rx-rxwr- tob-rettiwt 90:32 4 beF 6904 keviv keviv 2 x-rx-rxwrd smc.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr- qaf.elif.daolpu 7102 9 nuJ 807 keviv keviv 1 x-rx-rxwr- pit.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr- hs.egamidaolpu 3102 81 tcO 3911 keviv keviv 1 x-rx-rxwr- nalnoekaw 00:41 21 tcO 1325 keviv keviv 1 x-rx-rxwr- 2x 7102 52 nuJ 017 keviv keviv 1 x-rx-rxwr-

The syntax is:

alias name=value

Add the following to the ~/.bashrc file:

echo 'alias sl="/home/$USER/bin/sl -l"' >> ~/.bashrc

Load it:

$ source ~/.bashrc

Test it:

$ sl



How to verify sl command execution path

Use the type command or command command as follows:

$ type -a sl

sl is aliased to `/home/vivek/bin/sl -l'

sl is /home/vivek/bin/sl

sl is /usr/games/sl

$ command -V sl

alias sl='/home/vivek/bin/sl -l'



You can temporarily disable an alias using any one of the following method:

"command"

\command"

\sl

\ls

command ls

command sl

For more info see this page.

