Во-первых, примечание к $PATH
. У вас есть JAVA_HOME
установленный в каталог jdk
, но для PATH
вам нужно сделать это $JAVA_HOME/bin
.
Во-вторых, если вам нужно, чтобы эти переменные были доступны для не -интерактивных сценариев, вы можете поместить их в ~/.bashrc
, так как ~/.bash_profile
читаются только интерактивными входами в систему.
На самом деле, фактический порядок, в котором (считываются профили )оболочки входа в систему,:
/etc/profile
, затем:
~/.bash_profile
(В CentOS, если -f ~/.bashrc
, источники~/.bashrc
)~/.bash_login
~/.profile
(В Ubuntu, если -n $BASH_VERSION
, источники~/.bashrc
)РЕДАКТИРОВАТЬ :Если один из этих файлов найден, дальнейшие файлы не обрабатываются, если они не указаны явно
Оболочки входа без -(по умолчанию )ищут только ~/.bashrc
.
Таким образом, в зависимости от того, как вы выполняете bash
, вы можете даже не читать профиль, в который добавили эти строки. Выполняете ли вы sudo -u grid bash
, или su grid
, или su - grid
, или инициируете новый сеанс ssh каждый раз при тестировании? Некоторые из этих параметров могут не запускать интерактивную оболочку bash для входа в систему.
Поэтому проверьте каждый из файлов, перечисленных выше, и посмотрите, не сбрасывает ли какой-либо из них значение переменной JAVA_HOME
или сбрасывает ее. Затем попробуйте добавить строки в конец ~/.profile
, который является последним файлом, полученным оболочкой входа в систему.
В целях отладки вы можете добавить сообщения в профиль, чтобы убедиться, что он также настроен правильно.
~/.profile
:
export JAVA_HOME=/home/grid/jdk
echo "DEBUG:.profile: JAVA_HOME is [$JAVA_HOME]"
export HADOOP_HOME=/home/grid/hadoop
echo "DEBUG:.profile: HADOOP_HOME is [$HADOOP_HOME]"
PATH=$HADOOP_HOME:$JAVA_HOME/bin:$PATH
echo "DEBUG:.profile: PATH is [$PATH]"
export PATH
Это вызовет 3 строки вывода при входе в интерактивную оболочку входа,а значения в скобках позволяют легко увидеть, устанавливаются ли значения с самого начала. Если вы видите, чтоJAVA_HOME
устанавливается как при получении ~/.profile
, но не устанавливается, когда оболочка становится интерактивной, то вы знаете, что вам нужно продолжать следовать процессу входа в систему, чтобы определить, где значение изменяется.
{ tr -d '\n' </dev/urandom | head -c 1m; printf '\n'; } >/sdcard/file.txt
Предполагая, что GNU head
, это могло бы получить один мегабайт (вполне возможно двоичных, непечатаемых )данных из /dev/urandom
без каких-либо символов новой строки в нем, а затем добавить новую строку в конце. Вывод будет сохранен в /sdcard/file.txt
. Эта единственная «строка» не будет правильной строкой текста, поскольку она вполне может включать нулевые байты.
Если вам нужны только буквенно-цифровые данные,
{ tr -dc '[:alnum:]' </dev/urandom | head -c 1m; printf '\n'; } >/sdcard/file.txt
Это удалит все не -буквенно-цифровые символы из случайного потока из /dev/urandom
, обрежет его на 1 МБ, а затем, как и раньше, добавит символ новой строки.
/dev/urandom
. Например, иметь 1 000 000 печатных символов ASCII:
{ </dev/urandom \
LC_ALL=C tr -dc ' -~' |
head -c 1000000 &&
echo
} >/sdcard/file.txt