1

Недавно я учусь писать код скрипта.

Я написал сценарий:

#!/bin/sh
# while3b.sh
while f=`line`
do
        .. process f ..
done < ./myfile

а вот myfile

hello
howdy
gday
bonjour
guten tag 
您好!
*

в терминале я ввожу это:sh while3b.sh а затем он запрашивает некоторую информацию о разрешениях, как это.

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

Я пытался использовать ls -al для проверки rwx myfile

-rwxrwxrwx 1 shanechiu shanechiu    48 Jan 31 11:38 myfile
-rwxr-xr-x 1 shanechiu shanechiu    61 Jan 31 11:45 while3b.sh

и я использовал su - root чтобы перейти в super user, затем снова выполнил сценарий while3b.sh, та же информация показалась. Зачем?

Кто-нибудь может сделать мне одолжение? Заранее спасибо.

1 ответ1

0

Я предполагаю, что это строка, содержащая звездочку (" * ") в вашем myfile . Вы как-то оцениваете f и, вероятно, столкнетесь с проблемами, когда звездочка развернута как символ сопоставления с образцом.

Пример:

#!/bin/sh
# while3b.sh
while f=`line`
do
        echo $f
done < ./myfile

приводит к

$ ./while3b.sh
hello
howdy
gday
bonjour
guten tag
您好!
myfile myfile~ while3b.sh

Поскольку мой каталог содержит три файла myfile , myfile~ и while3b.sh . Вы должны проверить свой код, который вы сократили как "process", что он делает, когда $f получает символ * .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .