107 linux
对于那些sl不了解循环的人,这是一个幽默的命令行工具,旨在在人们输入错误时绊倒他们ls。调用时,它会打印一个蒸汽机车。例如:
( ) (@@) ( ) (@) () @@ O @ O @ O
(@@@)
( )
(@@@@)
( )
==== ________ ___________
_D _| |_______/ \__I_I_____===__|_________|
|(_)--- | H\________/ | | =|___ ___| _________________
/ | | H | | | | ||_| |_|| _| \_____A
| | | H |__--------------------| [___] | =| |
| ________|___H__/__|_____/[][]~\_______| | -| |
|/ | |-----------I_____I [][] [] D |=======|____|________________________|_
__/ =| o |=-O=====O=====O=====O \ ____Y___________|__|__________________________|_
|/-=|___|= || || || |_____/~\___/ |_D__D__D_| |_D__D__D_|
\_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/
Run Code Online (Sandbox Code Playgroud)
但是,在 的手册页中sl,它指出了以下错误:
BUGS
It rarely shows contents of current directory.
Run Code Online (Sandbox Code Playgroud)
所以,问题依然存在,还有一些条件下,这sl实际上也显示当前目录?
小智 188
据我所知,sl显示当前目录的唯一条件是当您将其错误输入为ls.
l0b*_*0b0 41
sl打印蒸汽机车引理:蒸汽机车包含正斜杠:
$ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O
> (@@@)
> ( )
> (@@@@)
>
> ( )
> ==== ________ ___________
> _D _| |_______/ \__I_I_____===__|_________|
> |(_)--- | H\________/ | | =|___ ___| _________________
> / | | H | | | | ||_| |_|| _| \_____A
> | | | H |__--------------------| [___] | =| |
> | ________|___H__/__|_____/[][]~\_______| | -| |
> |/ | |-----------I_____I [][] [] D |=======|____|________________________|_
> __/ =| o |=-O=====O=====O=====O \ ____Y___________|__|__________________________|_
> |/-=|___|= || || || |_____/~\___/ |_D__D__D_| |_D__D__D_|
> \_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/'
touch: cannot touch ‘[...]’: No such file or directory
Run Code Online (Sandbox Code Playgroud)结论:sl从不显示当前目录。QED。
Ion*_*ham 37
这是修复该错误的补丁:)
diff --git a/sl.c b/sl.c
index 2eeceb3..f2213ad 100644
--- a/sl.c
+++ b/sl.c
@@ -37,6 +37,7 @@
#include <curses.h>
#include <signal.h>
#include <unistd.h>
+#include <stdlib.h>
#include "sl.h"
int ACCIDENT = 0;
@@ -71,6 +72,13 @@ void option(char *str)
int main(int argc, char *argv[])
{
int x, i;
+
+ srand(time(NULL));
+ if(rand() % 100 < 10)
+ {
+ /* 10% chance of directory listing :) */
+ execv("/bin/ls", argv);
+ }
for (i = 1; i < argc; ++i) {
if (*argv[i] == '-') {
Run Code Online (Sandbox Code Playgroud)
Gra*_*eme 23
您可以在此处查看源代码 - https://github.com/mtoyoda/sl,唉,除了记录的选项之外没有其他选项,遗憾的是没有任何选项可以实际打印文件的名称。
所以看起来@sfyn 的答案是正确的。
小智 12
请注意,I0b0 的答案只是一个证明,sl永远不会显示所有且仅显示当前目录列表。但是,在某些情况下sl会显示当前目录列表以及附加“信息”。
例如,在一个空目录中:
$ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O'
$ touch ' (@@@)'
$ touch ' ( )'
$ touch ' (@@@@)'
$ touch ' ( )'
$ sl
Run Code Online (Sandbox Code Playgroud)
将在前 6 行列出目录的内容,在其余 10 行将方便地用火车图像(没有烟雾)修饰此列表。
我知道Lego Stormtroopr已经记录了一张票,以便可以解决关键问题。谁知道推出修复程序可能需要多长时间?
因此,我提供了一种解决方法,以便将严重问题造成的影响降至最低。您可以创建一个 shell 函数sl来执行sl:
sl() {
((RANDOM%42)) && command sl || ls;
}
Run Code Online (Sandbox Code Playgroud)
现在调用sl将偶尔列出目录内容。