Eu suspeitava que arquivo regular era mesmo diferente de arquivo texto, quer dizer, um arquivo texto pode ser um arquivo regular, mas um arquivo regular pode não ser um arquivo texto. A verdade é que a opção -f funcionaria em qualquer arquivo texto, mas funcionaria também em outros e a intenção do script é justamente proibir que ele tente abrir qualquer arquivo que não seja texto. A minha definição de arquivo texto MrBits, é qualquer arquivo que pode ser aberto no Vi, nano, gedit, etc... A idéia de usar o file -i <arquivo> > grep "text/" não é boa porque não funcionaria com scripts (e outros, talvez). Veja dois exemplos, no estilo que você mencionou:
el...@fedora: ~ $ file script.sh script.sh: Boushell.sh: Bourne-Again shell script text executable el...@fedora: ~ $ file -i script.sh script.sh: application/x-shellscript Observe que eu poderia saber que o script era um arquivo texto com o comando file script.sh | grep "text" no primeiro caso, mas não poderia saber se era um arquivo texto com esse outro comando mencionado. Vejamos um outro exemplo com o arquivo /etc/sudoers: el...@fedora: ~ $ file /etc/sudoers /etc/sudoers: regular file, no read permission Nesse caso, não adianta procurar por algum "text" na saída do comando e foi isso que me incomodou. A idéia do Júlio é interessante, mas nesse caso, não haveria teste nenhum para saber se o arquivo é ou não texto. :-( Me ocorreu no momento em que escrevo que a idéia de utilizar o file <Arquivo> | grep "text" parece ser a melhor ( embora eu ainda ache isso uma gambiarra) . Acho que o problema com o /etc/sudoers é porque este não tem permissão de leitura e o file precisa ler ele de alguma maneira para saber o tipo. Oras, se o arquivo não pode ser lido, eu nem preciso me preocupar em abrir ele com o cat ou o less. Se eu desse permissão de leitura para ele, acho que poderia conseguir alguma informação útil. Vou testar isso (estou num PC sem permissões de root agora :-( ) e ver se "rola". Abs. 2008/12/17 Jeferson A. Cassol <[email protected]> > file -i <arquivo> | grep "text/" > ajuda em uma boa parte de arquivos.... > > -- > -- > Jeferson A. Cassol > 2008/12/17 Julio C. Neves <[email protected] <julio.neves%40gmail.com> > > > > > > Fala Elder, > > troque o cat por strings. Se vc fizer strings arq.txt, ele te lista > arq.txt > > como se vc tivesse feito um cat, mas se vc fizer strings /bin/ls, ele só > > listará alguns trechos legíveis, sem 'empepinar' o monitor. > > -- > > Abração, > > Julio > > *Cursos de Shell e Zenity nos finais de semana: > > - Em SP ligue (11) 2125-4747; > > - Em DF ligue (61) 3223-3000; > > - Turmas fechadas em outras cidades ligue (21) 8112-9988 > > * > > > > 2008/12/16 Elder Marco <[email protected] > > <eldermarco%40gmail.com><eldermarco% > 40gmail.com>> > > > > > > Olá, > > > > > > Bom, num dos meus primeiros scripts, eu decidi escrever algo que > pudesse > > me > > > ser útil. Não raro, dou um cat em um arquivo texto para saber seu > > conteúdo, > > > mas preciso usar algumas opções do cat (como mostrar o número da linha) > > ou > > > conectar a saída do comando para o less. De vez em quando eu também dou > > um > > > vacilo e acabo dando um cat em um arquivo que não é texto ... :( > > > > > > Então decidi fazer um script que recebe um ou dois parâmetros. Se > receber > > > dois, o primeiro será um parâmetro para o comando cat ou um comando que > > > envia a saída dele para o lesse e o segundo será o arquivo que deve ser > > > lido. O que eu preciso saber, além de outras coisas, é se esse arquivo > é > > ou > > > não um arquivo texto. Primeiramente pensei em inserir algo da seguinte > > > maneira: > > > > > > if [ ! -n $(file $ARQUIVO | grep text ) ; then > > > echo "$ARQUIVO não é um arquivo texto " > > > exit 1 > > > fi > > > > > > (eu não fechei o if acima porque esse bendito teclado aqui está > > > desconfigurado no momento em que escrevo e não consigo achar a tecla > que > > > fecha os colchetes!) > > > > > > No entanto, eu percebi que isso nem sempre pode funcionar pois o > comando > > > file pode lidar com algum arquivo texto e não necessariamente ter um > > "text" > > > na sua saída (por exemplo, o /etc/sudoers no Fedora 8). E convenhamos, > > isso > > > é muita gambiarra não é? :-) > > > > > > Uma opção que achei útil --- e é aqui que está a minha dúvida --- é a > > opção > > > -f do comando test que verifica se um arquivo é um arquivo regular. > > > > > > O que significa exatamente um arquivo ser um arquivo regular? Eu > poderia > > > utilizar isso para saber se o arquivo é ou não um arquivo texto (e > > portanto > > > poderia ser lido com o cat)? Ou existe uma forma mais elegante de saber > > > isso? > > > > > > Abs > > > > > > -- > > > Elder Marco > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Elder Marco Linux User: #471180 "O conhecimento é tristeza: aqueles que mais sabem são os que mais profundamente devem lamentar a mais fatal verdade, a árvore do conhecimento não é a da vida." (Versos extraídos da tragédia Manfred, de Byron e citado por Nietzsche em "Humano, demasiado humano") [As partes desta mensagem que não continham texto foram removidas]
