Abstração universal de ls

0

Especificações

OS: OS X; Cliente: Terminal; Conchas: sh, bash

Problema

Estou escrevendo um script de shell que adiciona uma camada de abstração ao comando ls . Eu quero torná-lo "inquebrável", então comecei descobrindo todos os comandos possíveis que ls pode aceitar (via [ls (1) - página de manual do Linux] [1]) para que eu possa executar outra camada de validação / controle nas opções passadas através da linha de comando.

Antes de ir muito longe no meu script, decidi ver qual era o funcionamento normal de ls por alguma opção longa (hífen duplo). Eu tentei um número deles, cada um falhando de uma maneira ou de outra. Por exemplo, a saída de executar ls --ignore-backups é:

<dir> <username>$ ls --ignore-backups
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

O que foi dito acima foi o mesmo, quer eu tenha executado via sh ou bash (o que eu sei ser óbvio para usuários mais experientes).

Neste momento, corri man ls , o que me mostrou que apenas as opções de uma única letra são aceitas pela versão de ls na minha máquina.

Perguntas

  • Como posso fazer o meu script universal?
  • Geralmente, ao passar argumentos de linha de comando para um comando UNIX / Linux subjacente, há uma biblioteca padrão aceita na qual basear os esforços de uma pessoa?
  • Estou sentindo falta de um entendimento essencial da biblioteca de comandos do UNIX / Linux?

OBSERVAÇÃO: Sou relativamente novo no shell de scripts e não tenho certeza se estou mesmo fazendo a (s) pergunta (s) correta (s).

    
por JDQ 20.04.2016 / 02:08

2 respostas

2

Se você está desenvolvendo e visando o OS X, é melhor olhar para a página de manual do OS X ls , não para o Linux one e manter as opções documentadas lá.

Como alternativa, se você quiser que seu script funcione "inquebrantavelmente" em todas as implementações Unix, estará mais ou menos condenado. Embora exista um conjunto comum de opções, você encontrará em todas as implementações quais são as definidas pelo POSIX , há certamente muitas extensões não padrão, como os hífen duplos do GNU, mas também opções de caractere único que podem ser específicas de um sistema operacional e / ou do dialeto ls . Não existe uma maneira genérica e portátil de identificar as opções suportadas por uma determinada implementação de comando.

    
por 20.04.2016 / 02:24
-2

Se você gosta de escrever scripts portáteis, não use GNUisms , por exemplo. long options .

As opções definidas por POSIX são geralmente suficientes e a maioria das opções longas do GNU são apenas aliases para as opções curtas oficiais que funcionam em todos os lugares.

    
por 20.04.2016 / 13:01