Até onde eu sei, a única condição sob a qual sl
mostra o diretório atual é quando você digita como ls
.
Para aqueles que estão fora do loop, sl
é uma ferramenta de linha de comando que serve para enganar as pessoas se digitarem incorretamente ls
. Quando invocado, imprime uma locomotiva a vapor. Por exemplo:
( ) (@@) ( ) (@) () @@ 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_|
\_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/
No entanto, na página man de sl
, ele informa o seguinte bug:
BUGS
It rarely shows contents of current directory.
Então, a questão permanece: existem algumas condições, sob as quais sl
faz mostrar o diretório atual?
Até onde eu sei, a única condição sob a qual sl
mostra o diretório atual é quando você digita como ls
.
sl
imprime uma locomotiva a vapor Lemma: A locomotiva a vapor contém barras:
$ 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
Conclusão: sl
nunca mostra o diretório atual. QED.
Aqui está um patch para corrigir esse bug:)
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] == '-') {
Você pode verificar o código fonte aqui - link , infelizmente não há outras opções além das documentadas e infelizmente nada que vai realmente imprimir os nomes dos arquivos.
Portanto, parece que a resposta do @ sfyn é a correta.
Observe que a resposta do I0b0 é apenas uma prova de que sl
nunca exibirá todos e somente a listagem atual do diretório. No entanto, há circunstâncias em que sl
exibirá a listagem do diretório atual junto com informações adicionais.
Por exemplo, em um diretório vazio:
$ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O'
$ touch ' (@@@)'
$ touch ' ( )'
$ touch ' (@@@@)'
$ touch ' ( )'
$ sl
nas primeiras seis linhas listará o conteúdo do diretório e nas 10 linhas restantes embelezará convenientemente esta listagem com uma imagem de um trem (sem fumaça).
Eu sei que Lego Stormtroopr tem registrou um ticket para que o problema crítico possa ser resolvido. Quem sabe muito tempo que pode levar para uma correção ser implementada?
Como tal, forneci uma solução alternativa para que o impacto devido ao problema grave seja minimizado. Você pode criar uma função de shell sl
que executaria sl
:
sl() {
((RANDOM%42)) && command sl || ls;
}
Agora, invocar sl
, esporadicamente, listará o conteúdo do diretório.
Se você apelidá-lo de ls
, ele irá imprimir o diretório atual - na verdade, quando parei de rir da locomotiva a vapor, adicionei isso à minha lista de apelidos.
Você pode sempre revisar seu código-fonte, e você não verá sob nenhuma condição que ele nunca executará o comando ls
real nem os diretórios de exibição.
A fonte é bastante simples, na verdade. Mesmo se você não for "um programador", ainda assim será capaz de entender a maior parte dele.
Eu acredito que o "bug" que você postou acima é apenas uma brincadeira (e causar discussões como essa lol)
Sim, sl
agirá exatamente como ls se você configurar o alias apropriado no bash ou em qualquer shell que estiver usando!
Na verdade, tenho vários alias para ls incluindo
alias ls='ls -FG'
alias ll='ls -lFG'
obrigado pela sugestão - vou adicionar
alias sl='ls -FG'
(Não que eu tenha me lembrado de digitar sl
, mas depois eu cuido de ll
ou lh
!)
Você pode fazer como eu também ...
mv /usr/games/sl /usr/games/sl-OLD
mv /usr/games/LS /usr/games/LS-OLD
nano /usr/games/sl
Paste the following:
#!/bin/bash
echo "YOU TYPED 'sl' INSTEAD OF 'ls'!"
/usr/games/sl-old
echo "Guess I can list it anyways..."
/bin/ls
Pressione CTRL + X para sair e Y para salvar.
nano / usr / games / LS
Paste the following:
#!/bin/bash
echo "YOU TYPED 'LS' INSTEAD OF 'ls'!"
/usr/games/sl-old
echo "Guess I can list it anyways..."
/bin/ls
Pressione CTRL + X para sair e Y para salvar.
PS: Você é bem-vindo para reviver isso ... pesquisar por "comando sl linux" ainda traz esse tópico, então eu pensei em dar uma resposta real de como eu listei os arquivos ...
Tags linux