Поскольку вы не процитируете $ (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:: Нет такого файла или каталога
.
Сначала: выйдите из этого каталога в терминале:) 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 , текущим рабочим каталогом. Если вы увидите то же самое.. выйти из этого каталога;))
Одним из решений является удаление даты с конца с помощью cut
. Такой подход привел бы к:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p' | cut -d' ' -f1)
Этот подход разбивается на символ пробела (-d' ' )и берет первое поле. Основываясь на вводе, это приведет к удалению добавленной даты openjdk.
Это работает как для старого формата «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/