У меня есть сценарий bash, который печатает строку текста в файл, а затем вызывает второй скрипт, который печатает еще несколько данных в один и тот же файл. Позволяет называть их script1.sh и script2.sh. Причина, по которой он разделен на два сценария, заключается в том, что у меня разные версии script2.sh.Первая строка в файле не всегда печатается в скрипте bash
script1.sh:
rm -f output.txt
echo "some text here" > output.txt
source script2.sh
script2.sh:
./read_time >> output.txt
./run_program
./read_time >> output.txt
Вариации на три линии в script2.sh повторяются.
Это, похоже, работает большую часть времени, но каждый раз файл output.txt не содержит строки «некоторый текст здесь». Сначала я подумал, что это потому, что я вызывал script2.sh следующим образом: ./script2.sh
. Но даже при использовании source
проблема все еще возникает. Проблема не воспроизводима, поэтому даже когда я пытаюсь что-то изменить, я не знаю, действительно ли она исправлена.
Что может быть причиной этого?
Редактировать: Сценарии очень просты. script1 точно так же, как вы видите здесь, но с разными именами файлов. сценарий 2 - это то, что я опубликовал, но затем повторяются те же 3 строки, и у ./run_program
могут быть разные аргументы. Я сделал grep для выходного файла, и для >
, но он нигде не обнаруживается.
Способ использования этих сценариев заключается в том, что скрипт1 создается программой (единственная разница между версиями - это строка source script2.sh
.Это сценарий1.sh затем запускается на другом компьютере (linux на FPGA на самом деле), используя ssh Прежде чем это будет сделано, выходной файл также будет удален с помощью ssh. Я не знаю, почему, но я не написал все это. Кроме того, я проверил код, запущенный на хосте. выходной файл, когда он удаляется с помощью ssh, и когда он копируется обратно на хост после завершения скрипта.
Редактировать 2: Я, наконец, сумел сделать проблему воспроизводимой с разумной скоростью, сняв script2.sh всего, кроме одной строки, печатающей в файл. Это также позволяет мне делать тестирование немного быстрее. Как только у меня это было, у меня проблема между 1 и 4 раза за каждые 10 прогонов. Удаление команды, удаляющей файл поверх ssh до запуска скрипта, похоже, решило проблему. Я буду проверять его еще немного, но я думаю, что он решен. Хотя я все еще не уверен, почему это будет проблемой. Я думал, что команда ssh не выйдет, прежде чем все команды удаления будут выполнены.
- output.txt на удаленной файловой системе? или файловой системы, монтируемой в NFS? –
Поздравляю с решением этого :)! – spbnick
Спасибо за помощь. Оказывается, ssh был запущен неблокирующим способом. Я изменил его на блокировку, и теперь он работает так, как ожидалось. Я был готов поставить чек, чтобы увидеть, была ли напечатана первая строка, но зная реальную причину и исправление, это намного лучше. – user2435542