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

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.

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\\n" "$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-

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
sl - a mirror version of ls command

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.

Get 15% off on Linux Foundation certified SysAdmin, Progamming, Kubernetes/Containers and Open Stack certification & course. Use “CYBER15” coupon code.
training.linuxfoundation.org

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

Facebook Comments

More Stuff

Learning Linux bash scripting for beginners Bash (Bourne-Again Shell) is a Linux and Unix-like system shell or command language interpreter. It is a default shell on many operating systems inclu...
How can i view maillog for one domain in Linux ? SSH into root and type :cat /var/log/exim_mainlog | grep "domain.com" > logfile.txtthis should create a file called logfile.txt with the de...
Schedule, Registration now available for CentOS Dojo at FOSDEM Schedule, Registration now available for CentOS Dojo at FOSDEM Wednesday , 7, November 2018 Rich Bowen announcementWe are pleased to announce the ...
No! Don’t turn off SELinux! One of the daily activities of the CentOS Community Lead is searching the Internet looking for new and interesting content about CentOS that we can sh...
Spread the love

Posted by News Monkey