Сценарий пытается создать файлы даже при том, что он не должен иметь к?

Ни на кого не похож, знает способ сделать это, затем.

Вместо этого я просто сделал то, что в основном делает Tomcat; запишите сценарий оболочки и вызовите это от моего сервиса вместо вызова java непосредственно.

Этот сценарий оболочки также заботится о создании использования файла PID echo $! после запуска JVM. Для завершения работы я записал подобный сценарий, который проверяет этот файл PID и удаляет его после успешного завершения работы. Оба сценария вызываются с помощью sudo -Eu $USER script_name.sh от сервиса.

Технически, это не отвечает на мой вопрос, потому что решение не использует startproc вообще, но это работает и избегает громоздкой задачи сравнения командных строк выполнения процессов.

4
08.04.2015, 01:51
5 ответов

-f в вашем тесте проверяет, существует ли FILE и является ли он обычным файлом . Вам понадобится -d , чтобы проверить, существует ли ФАЙЛ и является ли он каталогом .

if [ ! -d "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi

Однако не обязательно проверять, существует ли каталог. Согласно странице руководства mkdir , мы видим следующее

man mkdir | grep -A1 -- -p

   -p, --parents
          no error if existing, make parent directories as needed

Однако, если FILE существует и является обычным файлом mkdir -p завершится ошибкой с

mkdir: /Allfoldersgoeshere/subfolder/0folder': Not a directory.  

В этом сценарии обработка файла , который, как ожидается, будет каталогом , будет необходима перед созданием каталога.

12
27.01.2020, 20:45

Прочитайте руководство. Параметр -P сделает каталог и промежуточные каталоги по мере необходимости, если оно не существует или молча. Предполагая, что вы не обрабатываете тысячи файлов, то вы могли бы просто сделать MKDIR -P "$ {dir} / 0folfolder Или, если вы чувствуете необходимость тестирования

 [ -d "${DIR}/0folder" ] || mkdir -p "${DIR}/0folder"
2
27.01.2020, 20:45

Руководство MAN BASH в соответствии с условными выражениями:

-f file
          True if file exists and is a regular file.

-d file
          True if file exists and is a directory.

Итак, чтобы проверить наличие каталога (не файла) ...

if [[ ! -d "$DIR/0folder" ]] ; then
    mkdir "$DIR/0folder"
fi
3
27.01.2020, 20:45

Ни -d, ни -f не полезны здесь для проведения робастных тестов - ведь они прямо противоположны сторонам одной и той же монеты.

touch file; [ ! -d file ] && mkdir file
mkdir: cannot create directory ‘file’: File exists

Видишь? Лучше было бы [ -e ... ] || mkdir ... для проверки существования, что, по крайней мере, сэкономило бы на приведенной выше ошибке, но даже в этом есть свои проблемы - например, расовые условия или не создание родителей по мере необходимости, или неразрешенные симлинки.

if    [ ! -e "$DIR/0folder" ] && 
      [ ! -L "$DIR/0folder" ] 
then  mkdir -- "$DIR/0folder"
fi

... ближе, но все же радостно и все же предполагает, что все родители тоже существуют.

Вероятно, вы могли бы придумать уверенный тест , если бы вам это было нужно, но на самом деле это не так. Вы можете получить создание атомарного каталога w/ mkdir -p и протестировать его возврат. Не так уж и много стандартных инструментов оболочки, которые предлагают атомные fs ops - лучше воспользоваться теми, которые делают.

3
27.01.2020, 20:45

Вы делаете: если папки $DIR/0folder не существует, сделайте каталог с таким именем.

Просто измените -f (файл) на -d (каталог).

Это должно решить вашу проблему, теперь вас могут заинтересовать некоторые советы, которые люди давали здесь, но это не так.

1
27.01.2020, 20:45

Теги

Похожие вопросы