{"id":441,"date":"2018-10-17T11:39:55","date_gmt":"2018-10-17T11:39:55","guid":{"rendered":"https:\/\/www.appservgrid.com\/paw92\/index.php\/2018\/10\/17\/linux-unix-desktop-fun-sl-a-mirror-version-of-ls\/"},"modified":"2018-10-17T11:39:55","modified_gmt":"2018-10-17T11:39:55","slug":"linux-unix-desktop-fun-sl-a-mirror-version-of-ls","status":"publish","type":"post","link":"https:\/\/www.appservgrid.com\/paw92\/index.php\/2018\/10\/17\/linux-unix-desktop-fun-sl-a-mirror-version-of-ls\/","title":{"rendered":"Linux\/Unix desktop fun: sl &#8211; a mirror version of ls"},"content":{"rendered":"<p>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.<\/p>\n<p><a href=\"https:\/\/www.cyberciti.biz\/tips\/displays-animations-when-accidentally-you-type-sl-instead-of-ls.html\">sl is a joke software or classic UNIX game. It is a steam locomotive runs across your screen if you type \u201csl\u201d (Steam Locomotive)<\/a> instead of \u201cls\u201d by mistake. Now there is a twist to older sl command.<\/p>\n<h2> sl \u2013 a mirror version of ls<\/h2>\n<p>From the blog post:<\/p>\n<blockquote>\n<p>I didn\u2019t 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.<\/p>\n<\/blockquote>\n<h2>source code<\/h2>\n<p>The program is written in the bash shell. Here is the source code:<\/p>\n<table>\n<tr>\n<td>#!\/bin\/bash<br \/>\n# sl &#8211; prints a mirror image of ls. (C) 2017 Tobias Girstmair, https:\/\/gir.st\/, GPLv3<\/p>\n<p>LEN=$(ls &#8220;$@&#8221; |wc -L) # get the length of the longest line<\/p>\n<p>ls &#8220;$@&#8221; | rev | while read -r line<br \/>\ndo<br \/>\n printf &#8220;%$.$s\\n&#8221; &#8220;$line&#8221; | sed &#8216;s\/^(s+)(S+)\/21\/&#8217;<br \/>\ndone<\/td>\n<\/tr>\n<\/table>\n<p>#!\/bin\/bash<br \/>\n# sl &#8211; prints a mirror image of ls. (C) 2017 Tobias Girstmair, https:\/\/gir.st\/, GPLv3 LEN=$(ls &#8220;$@&#8221; |wc -L) # get the length of the longest line ls &#8220;$@&#8221; | rev | while read -r line<br \/>\ndo<br \/>\nprintf &#8220;%$.$s\\n&#8221; &#8220;$line&#8221; | sed &#8216;s\/^(s+)(S+)\/21\/&#8217;<br \/>\ndone<\/p>\n<h3>Run it as follows<\/h3>\n<p>First create ~\/bin\/ directory using the mkdir command:<\/p>\n<p>$ mkdir ~\/bin\/ Next, store above source code. cd into the ~\/bin\/ using the cd command:<\/p>\n<p>$ cd ~\/bin\/<br \/> $ vi sl Save and close the file. Set permission on your shell script using the chmod command:<\/p>\n<p>$ chmod +x sl Test it:<\/p>\n<p>$ ls -l<br \/> $ .\/sl -l Sample outputs from sl command:<\/p>\n<\/p>\n<table>\n<tr>\n<td>txt.qaf.detaeler.km &gt;- txt.smc.detaeler.km 05:41 32 ceD 91 keviv keviv 1 xwrxwrxwrl<br \/>\nqaf.detaeler.km 72:41 11 ceD 709 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.qaf.detaeler.km 34:51 61 voN 121 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\ntxt.qaf.detaeler.km 85:00 01 beF 014 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nspit.detaeler.km 94:41 32 ceD 709 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.spit.detaeler.km 84:41 32 ceD 121 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nssr.setadpu.km 95:00 7 naJ 618 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.ssr.setadpu.km 24:22 2 naJ 463 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\ntxt.ssr.setadpu.km 22:12 02 beF 4221 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.014.xnign 43:11 6 naJ 684 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.103.moc.tfarcxin 5102 52 rpA 631 keviv keviv 1 x-rx-rxwr-<br \/>\netacsufbo 5102 91 luJ 9931 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.lapyap 84:41 02 ceD 865 keviv keviv 1 x-rx-rxwr-<br \/>\ntxt.lapyap 7102 03 naJ 4131 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.daolputsop 3102 13 ceD 135 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.daolpuerp 3102 13 ceD 734 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.niamod.eralfduolc.lla.egrup 7102 81 yaM 6401 keviv keviv 1 x-rx-rxwr-<br \/>\nnohtyp 05:20 5 beF 6904 keviv keviv 2 x-rx-rxwrd<br \/>\nls 92:61 13 raM 672 keviv keviv 1 x-rx-rxwr-<br \/>\nresu.tidder.ecruos 7102 42 naJ 911 keviv keviv 1 x-rx-rxwr-<br \/>\n014.deteled.sgat 95:32 02 raM 97732 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.teewt 53:10 62 naJ 58653 keviv keviv 1 x-rx-rxwr-<br \/>\ntob-rettiwt 90:32 4 beF 6904 keviv keviv 2 x-rx-rxwrd<br \/>\nsmc.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr-<br \/>\nqaf.elif.daolpu 7102 9 nuJ 807 keviv keviv 1 x-rx-rxwr-<br \/>\npit.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.egamidaolpu 3102 81 tcO 3911 keviv keviv 1 x-rx-rxwr-<br \/>\nnalnoekaw 00:41 21 tcO 1325 keviv keviv 1 x-rx-rxwr-<br \/>\n2x 7102 52 nuJ 017 keviv keviv 1 x-rx-rxwr-<\/td>\n<\/tr>\n<\/table>\n<p>txt.qaf.detaeler.km &gt;- txt.smc.detaeler.km 05:41 32 ceD 91 keviv keviv 1 xwrxwrxwrl<br \/>\nqaf.detaeler.km 72:41 11 ceD 709 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.qaf.detaeler.km 34:51 61 voN 121 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\ntxt.qaf.detaeler.km 85:00 01 beF 014 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nspit.detaeler.km 94:41 32 ceD 709 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.spit.detaeler.km 84:41 32 ceD 121 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nssr.setadpu.km 95:00 7 naJ 618 keviv keviv 1 x-rx-rxwr-<br \/>\netalpmet.ssr.setadpu.km 24:22 2 naJ 463 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\ntxt.ssr.setadpu.km 22:12 02 beF 4221 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.014.xnign 43:11 6 naJ 684 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.103.moc.tfarcxin 5102 52 rpA 631 keviv keviv 1 x-rx-rxwr-<br \/>\netacsufbo 5102 91 luJ 9931 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.lapyap 84:41 02 ceD 865 keviv keviv 1 x-rx-rxwr-<br \/>\ntxt.lapyap 7102 03 naJ 4131 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.daolputsop 3102 13 ceD 135 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.daolpuerp 3102 13 ceD 734 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.niamod.eralfduolc.lla.egrup 7102 81 yaM 6401 keviv keviv 1 x-rx-rxwr-<br \/>\nnohtyp 05:20 5 beF 6904 keviv keviv 2 x-rx-rxwrd<br \/>\nls 92:61 13 raM 672 keviv keviv 1 x-rx-rxwr-<br \/>\nresu.tidder.ecruos 7102 42 naJ 911 keviv keviv 1 x-rx-rxwr-<br \/>\n014.deteled.sgat 95:32 02 raM 97732 keviv keviv 1 &#8211;r&#8211;r-wr-<br \/>\nhs.teewt 53:10 62 naJ 58653 keviv keviv 1 x-rx-rxwr-<br \/>\ntob-rettiwt 90:32 4 beF 6904 keviv keviv 2 x-rx-rxwrd<br \/>\nsmc.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr-<br \/>\nqaf.elif.daolpu 7102 9 nuJ 807 keviv keviv 1 x-rx-rxwr-<br \/>\npit.elif.daolpu 7102 9 nuJ 907 keviv keviv 1 x-rx-rxwr-<br \/>\nhs.egamidaolpu 3102 81 tcO 3911 keviv keviv 1 x-rx-rxwr-<br \/>\nnalnoekaw 00:41 21 tcO 1325 keviv keviv 1 x-rx-rxwr-<br \/>\n2x 7102 52 nuJ 017 keviv keviv 1 x-rx-rxwr-<\/p>\n<h2><a href=\"https:\/\/www.cyberciti.biz\/tips\/bash-aliases-mac-centos-linux-unix.html\">How to setup bash shell alias<\/a><\/h2>\n<p><a href=\"https:\/\/www.cyberciti.biz\/faq\/create-permanent-bash-alias-linux-unix\/\">The syntax is<\/a>:<\/p>\n<p>alias name=value Add the following to the ~\/.bashrc file:<\/p>\n<p>echo &#8216;alias sl=&#8221;\/home\/$USER\/bin\/sl -l&#8221;&#8216; &gt;&gt; ~\/.bashrc Load it:<\/p>\n<p>$ source ~\/.bashrc Test it:<\/p>\n<p>$ sl<img loading=\"lazy\" decoding=\"async\" alt=\"sl - a mirror version of ls command\" height=\"640\" src=\"https:\/\/www.cyberciti.biz\/media\/new\/cms\/2018\/03\/sl-a-mirror-version-of-ls-command.jpg\" width=\"598\" \/><\/p>\n<\/p>\n<h3>How to verify sl command execution path<\/h3>\n<p>Use the <a href=\"https:\/\/bash.cyberciti.biz\/guide\/Type_command\">type command<\/a> or <a href=\"https:\/\/bash.cyberciti.biz\/guide\/Command\">command command<\/a> as follows:<\/p>\n<p>$ type -a sl<\/p>\n<p>sl is aliased to `\/home\/vivek\/bin\/sl -l&#8217;<br \/> sl is \/home\/vivek\/bin\/sl<br \/> sl is \/usr\/games\/sl $ command -V sl<\/p>\n<p>alias sl=&#8217;\/home\/vivek\/bin\/sl -l&#8217;<\/p>\n<p> You can <a href=\"https:\/\/www.cyberciti.biz\/faq\/bash-shell-temporarily-disable-an-alias\/\">temporarily disable an alias using any one of the<\/a> following method:<\/p>\n<p>&#8220;command&#8221;<br \/> command&#8221;<br \/> sl<br \/> ls<br \/> command ls<br \/> command sl For more info see <a href=\"https:\/\/gir.st\/blog\/sl-alt.htm\" target=\"_blank\">this page<\/a>.<\/p>\n<p><\/p>\n<h2>Posted by: Vivek Gite<\/h2>\n<p> 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 <a href=\"https:\/\/www.cyberciti.biz\/atom\/atom.xml\">RSS\/XML feed<\/a> or <a href=\"https:\/\/www.cyberciti.biz\/subscribe-to-weekly-linux-unix-newsletter-for-sysadmin\/\">weekly email newsletter<\/a>.<\/p>\n<p> <a href=\"https:\/\/www.cyberciti.biz\/open-source\/command-line-hacks\/linux-unix-desktop-fun-sl-a-mirror-version-of-ls\/\" target=\"_blank\">Source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 \u201csl\u201d &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.appservgrid.com\/paw92\/index.php\/2018\/10\/17\/linux-unix-desktop-fun-sl-a-mirror-version-of-ls\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Linux\/Unix desktop fun: sl &#8211; a mirror version of ls&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-441","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/comments?post=441"}],"version-history":[{"count":0,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/441\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/media?parent=441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/categories?post=441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/tags?post=441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}