BASH Неожиданный EOF - PullRequest
       8

BASH Неожиданный EOF

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


Мой Mac продолжает указывать на неожиданный конец файла для этого скрипта bash в последней строке. Я не новичок в программировании, но очень плохо знаком с BASH, кто-нибудь видит что-то не так с этим?

#!/bin/bash  
#bootstrapper.sh
PIDD="$5"
while sleep 1; do kill -0 $PIDD || break; done
# Absolute path to this script. /home/user/bin/foo.sh
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`
POSPAR1="$1" #-l
POSPAR2="$2" #location
POSPAR3="$3" #-d
POSPAR4="$4" #directory
cp -r -f $SCRIPTPATH/$4/* $2
rm -r -f $SCRIPTPATH/$4

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Я скопировал ваш код из вопроса на Mac (copy'n'paste) и запустил файл с:

bash -n -v x.sh

Фактически, я сделал это дважды;в первый раз я убедился, что в конце файла был символ новой строки, а во второй раз я убедился, что символа новой строки нет.И Bash был счастлив оба раза.

Это указывает на то, что проблема не в видимых символах;в файле есть невидимые символы, вызывающие горе.Вам, вероятно, понадобится изучить файл с помощью инструмента, такого как od -c, чтобы найти символ, который вызывает проблему.

Кроме того, FWIW, команда readlink на моем Mac дает:

$ readlink -f $0
readlink: illegal option -- f
usage: readlink [-n] [file ...]
$

Версия Linux readlink занимает -f.Это не команда POSIX, поэтому не существует стандарта de jure , на который можно ссылаться.

0 голосов
/ 21 марта 2011


Анализ файла с помощью od -c показал, что конец строки был \ r \ n, я изменил файл в одной Windows, глупый я.В любом случае, у меня возникли другие проблемы со скриптом BASH.Эта строка:

while sleep 1; do kill -0 $PIDD || break; done

Предполагается дождаться закрытия PID (хранящегося в переменной $ PIDD).Он ждет, пока он не существует (PID), но когда он, наконец, не существует, он выдает: kill: 4: Нет такого процесса.Остальная часть сценария работает как задумано, но затем сценарий не завершается.Могу ли я сделать так, чтобы сценарий завершился должным образом, и чтобы такой процесс не выводился?
Извините за все вопросы новичка, я ужасен в BASH и Linux.
Еще раз спасибо за вашу помощь.

...