Recentemente, estou aprendendo a escrever código de script.
Eu escrevi um roteiro:
#!/bin/sh
# while3b.sh
while f=`line`
do
.. process f ..
done < ./myfile
e aqui estámyfile
hello
howdy
gday
bonjour
guten tag
您好!
*
no terminal, eu inseri isto: sh while3b.sh
e então ele solicitou algumas informações de permissão como esta.
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
while3b.sh: 4: while3b.sh: ..: Permission denied
Eu tentei usar ls -al
para rwx
verificarmyfile
-rwxrwxrwx 1 shanechiu shanechiu 48 Jan 31 11:38 myfile
-rwxr-xr-x 1 shanechiu shanechiu 61 Jan 31 11:45 while3b.sh
e eu costumava su - root
mudar para superusuário e executava o script while3b.sh novamente, as mesmas informações eram exibidas. Por que?
Alguém poderia me fazer um favor? Agradeço antecipadamente.
Responder1
Meu palpite é que é a linha que contém o asterisco (" *
") no seu arquivo myfile
. Você avalia f
de alguma forma e provavelmente terá problemas quando o asterisco for expandido como caractere de correspondência de padrão.
Exemplo:
#!/bin/sh
# while3b.sh
while f=`line`
do
echo $f
done < ./myfile
leva a
$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh
Porque meu diretório contém os três arquivos myfile
e myfile~
. while3b.sh
Você deve examinar seu código, que foi abreviado como "processar", o que ele faz quando $f
é alimentado com o arquivo *
.