por que os comandos * NIX possuem tais padrões “insanos” (contra-intuitivos) (ponderação filosófica)? [fechadas]

4

Por que a maioria dos comandos * NIX meus (a experiência é Linux e raro encontro com FreeBDS) tem comportamentos padrão, não intencionais (não intuitivos), ou seja, MUITO diferente do que a ação GUI "equivalente" faria.

O exemplo mais óbvio é o comando de cópia de arquivo, cp , que por padrão no Linux não (1) não copia diretórios recursivamente (obviamente contra-intuitivo para qualquer um que venha ao shell usando uma GUI onde copiar / colar cópias um diretório e cada coisa nele) e (2) siga simlinks (!!) ao invés de apenas copiá-los da maneira que eles são (novamente, como qualquer usuário da GUI esperaria). Portanto, a versão "sã" de cp que imagino que deveria ser padrão é algo como: cp -r .

(E, novamente, essa não é uma perspectiva "tendenciosa" exclusiva de alguém que só usou uma GUI antes. O comando DOS copy , por exemplo, faz o que você espera, como um equivalente de cp -r ou cp -ra ...)

Outro exemplo óbvio é o rm quando rm -ri é o que qualquer não-geek espera ser o padrão.

E continua com 90% de todos os comandos * NIX, onde obter o que você intuitivamente espera ser o padrão é algo que você consegue adicionando mais algumas opções. E não é como se o que um usuário avançado espera ser o padrão não seja o que um usuário novato faz, para coisas como cp e rm , é óbvio que 99% do tempo cp -r e rm -r é o que você precisar. E não é como se as coisas só precisassem ficar desse jeito para compatibilidade com versões anteriores, já que você pode criar um novo shell e manter #/usr/bin/oldshell ou algo do antigo.

Então, novamente, a questão seria por que as opções / switches default do comando NIX shell estão tão longe para o que você espera intuitivamente? Onde posso encontrar os argumentos históricos de como as coisas estão? (mesmo para propósito anedótico) e que outra razão, então, a desagradável compatibilidade retroativa é para o estado atual das coisas?

Encontrado isto no unix.stackexchange que realmente responde MUITAS das minhas perguntas ...

    
por NeuronQ 13.10.2012 / 11:59

1 resposta

3

Os comandos fazem exatamente como esperado deles. Você pode descobrir o que é razoável esperar de um comando olhando a página de manual para esse comando.

E.G.

man cp:       -i, --interativo                   prompt before overwrite (substitui uma opção anterior -n)

Se você se acha pensando que algumas opções são boas o tempo todo, existem várias maneiras de persistir em suas escolhas. Você pode, por exemplo, digitar:

alias rm="rm -i"
alias cp="cp -r"

Mas isso só vai durar até você sair. Para tornar tais opções permanentes, você pode colocar esses aliases em um arquivo que é lido por yor shell toda vez que você efetuar login. Se você executar o bash, poderá colocar seus comandos de inicialização em ~ / .bashrc. Geralmente, ~ / .profile também é um bom lugar para colocar aliases.

O estado atual das coisas, quando os shells e utilitários de linha de comando estão em causa, está longe de ser desagradável. O choque inicial de usar o terminal em vez de um navegador gráfico, pode deixá-lo confuso e talvez um pouco enfurecido, mas somente depois de alguns anos você vai se acostumar com isso e vai rir quando você costuma pensar que um navegador da GUI era "o estado atual das coisas".

Por uma questão de boa vontade, e para recebê-lo no mundo da interface de linha de comando, eu lhe darei alguns dos meus apelidos favoritos. E eu lhe darei que cp -i e rm -i são muito melhores para ter como comandos padrão, porque é muito fácil cometer um erro e remover muitos arquivos involuntariamente. Eu não concordo com a opção recursiva.

# basic file manipulation, etc
alias cd....='cd ../..'
alias  cd...='cd ../..'
alias   cd..='cd ..'
alias    cd.='cd .'
alias    cd~='cd ~'
alias   ....='cd ../..'
alias    ...='cd ../..'
alias     ..='cd ..'
alias      ~='cd ~'

alias ls='ls --color=auto'
alias l='ls -CF'
alias l1='ls -1'
alias ll='ls -l'
alias lla='ls -la'
alias la='ls -a'


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mc='mv -i'

alias md="mkdir"
alias rd="rmdir"

alias less="less -i"
alias bc="bc -q"
alias KA="killall"

alias swipe='screen -wipe'
alias sdr='screen -dR $1'

# and some functions: 

spelling ()  {      echo $@ | LC_ALL=en_US aspell -a; }

google-search () {
    BROWSER="firefox '%s' &"
    args="${@}";
    args='echo $args | sed 's/ /%20/g'';
    url="https://www.google.no/search?hl=en&um=1&sa=1&q=";
    printf "$BROWSER\n" "$url$args" | sh
}
    
por 13.10.2012 / 12:45