проблема с файлом sh - PullRequest
       32

проблема с файлом sh

1 голос
/ 31 марта 2011

Я написал как sh file. Когда я выполняю его, он не работает правильно. Но с помощью тех же команд для командной строки он работает независимо. В чем может быть проблема? Я новичок в написании сценариев оболочки. быть оцененным. Вот мой файл sh в том числе:

mkdir prelab5
cd prelab5
wget http://cse.yeditepe.edu.tr/~oturkes/spring2011/cse232/week7/rms.txt &
grep "free" rms.txt | tail -n 10 > free.txt
cd ..
find /home/misafir -perm -755
chmod 744 file.txt
grep "free" rms.txt | wc
tr 'a-z' 'A-Z'<free.txt

Фоновый процесс означает, что он работает в фоновом режиме и позволяет нам одновременно использовать терминал. Также, хотя мы разрешаем работать в фоновом режиме, мы можем видеть уникальный идентификатор процесса (pid) этого фонового процесса на экране Поэтому, используя этот уникальный pid, мы можем выполнять любые команды в этом рабочем процессе bckground.

Ответы [ 4 ]

1 голос
/ 31 марта 2011

Первая проблема - это строка & wget. Он запускает wget в фоновом режиме, а затем сразу же вызывает greps rms.txt - но этот файл, вероятно, еще не закончил загрузку. Удалите & и все должно быть в порядке.

Вторая проблема заключается в том, что после того, как вы cd .., rms.txt и free.txt больше не находятся в текущем рабочем каталоге, поэтому последние две строки относятся к файлам, которые, как представляется, не существуют.

Наконец, очень непонятно, чего вы пытаетесь достичь с помощью find - так как вы написали это, он просто напечатает кучу материала в терминал. Точно так же неясно, каким должен быть файл file.txt - он нигде не упоминается.

В целом полезно, если вы указали, в чем заключается ваша цель, в дополнение к коду проблемы.

1 голос
/ 31 марта 2011

wget еще не закончил (и, вероятно, даже не запустил ) к тому времени, когда запускается grep.Удалите амперсанд в конце строки wget и вместо этого добавьте его в вызов скрипта.

1 голос
/ 31 марта 2011

удалить амперсанд в конце команды wget.

оболочка выполняет команды быстрее, чем вы их вводите;когда вы grep, "бесплатный" wget, вероятно, еще не закончен

0 голосов
/ 01 апреля 2011

В вашем скрипте разные проблемы.В тот момент, когда я не уверен, что вы знаете, что делает каждая строка.так

mkdir prelab5 # create a dire prelab5
cd prelab5  # change dir to prelab5
wget http://cse.yeditepe.edu.tr/.../rms.txt & #dl rms.txt
grep "free" rms.txt | tail -n 10 > free.txt

Эта последняя строка скрипта помещает 10 строк rms.txt, содержащих free, в free.txt.На данный момент rms.txt, вероятно, еще не существует.Вам лучше удалить & в конце предыдущей строки, чтобы последовательно выполнять каждую строку.

cd .. # go back to the parent directory
find /home/misafir -perm -755

Эта строка ищет файлы в другом месте, но результат не используется.

chmod 744 file.txt  # Modify a file we didn't hear about before 
grep "free" rms.txt | wc # Should fail since rms.txt is not in this directory
tr 'a-z' 'A-Z'<free.txt # Doesn't work this way
...