Java Основная версия Проверка в скрипте Bash

Поскольку вы не процитируете $ (echo-e "75577\n75578") , для его обработки требуется оболочка.

Способ синтаксического анализа оболочки зависит от переменной IFS (Внутренний разделитель полей). По умолчанию он содержит пробел, табуляцию и новую строку, что означает, что любая комбинация этих трех символов считается допустимым разделителем между аргументами.

Если задать строку, не содержащую new-line, команда получит \n , внедренную в аргумент, и завершится ошибкой:

$ touch a b
$ echo "$IFS" | od -c
0000000      \t  \n  \n
0000004$ 
$ ls -l a b
-rw-r--r-- 1 jlliagre jlliagre 0 Nov 12 15:04 a
-rw-r--r-- 1 jlliagre jlliagre 0 Nov 12 15:04 b
$ ls -l $(printf "a\nb")
-rw-r--r-- 1 jlliagre jlliagre 0 Nov 12 15:05 a
-rw-r--r-- 1 jlliagre jlliagre 0 Nov 12 15:05 b
$ IFS=" "
$ ls -l $(printf "a\nb")
ls: cannot access a
b: No such file or directory
$
-121--128410-

Поместите кавычки вокруг INSTALL_LOG_OUTPUT в свою функцию, например:

function install_log() {
    echo "$1" >> "$INSTALL_LOG_OUTPUT" 2>&1
}

После повторного запуска скрипта вы, вероятно, получите сообщение об ошибке, указывающее, что INSTALL_LOG_OUTPUT пуст, с сообщением такого рода: bash:: Нет такого файла или каталога .

-121--128434-

Сначала: выйдите из этого каталога в терминале:) Jocking.. но не так много, думая, сколько раз я запускаю umount и это дает мне ошибку, потому что я на самом деле внутри папки. Я бы зашел в терминал и попробовал lsof | grep ssdDirectory , чтобы увидеть, что он говорит, используя этот dir.

Пример вывода lsof | grep/mnt/share , где установлен общий ресурс.

COMMAND     PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
lsof      11930         root  cwd       DIR              253,2        15     213678 /mnt/share

Это означает, что lsof выполняется точно из/mnt/share с FD (дескриптором файла) cwd , текущим рабочим каталогом. Если вы увидите то же самое.. выйти из этого каталога;))

0
17.07.2018, 23:31
2 ответа

Одним из решений является удаление даты с конца с помощью cut. Такой подход привел бы к:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p' | cut -d' ' -f1)

Этот подход разбивается на символ пробела (-d' ' )и берет первое поле. Основываясь на вводе, это приведет к удалению добавленной даты openjdk.

1
28.01.2020, 02:42

Это работает как для старого формата «1.x.y», так и для нового формата «x.y»:

java -version 2>&1 \
  | head -1 \
  | cut -d'"' -f2 \
  | sed 's/^1\.//' \
  | cut -d'.' -f1

Источник:https://odoepner.wordpress.com/2014/07/27/get-java-version-string-via-shell-commands/

1
07.10.2020, 19:54

Теги

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