Создание случайного файла всего в одну строку, но с определенной длиной

Во-первых, примечание к $PATH. У вас есть JAVA_HOMEустановленный в каталог jdk, но для PATHвам нужно сделать это $JAVA_HOME/bin.

Во-вторых, если вам нужно, чтобы эти переменные были доступны для не -интерактивных сценариев, вы можете поместить их в ~/.bashrc, так как ~/.bash_profileчитаются только интерактивными входами в систему.

На самом деле, фактический порядок, в котором (считываются профили )оболочки входа в систему,:

  1. /etc/profile

, затем:

  1. ~/.bash_profile(В CentOS, если -f ~/.bashrc, источники~/.bashrc)
  2. ~/.bash_login
  3. ~/.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, но не устанавливается, когда оболочка становится интерактивной, то вы знаете, что вам нужно продолжать следовать процессу входа в систему, чтобы определить, где значение изменяется.

-1
05.09.2019, 14:02
2 ответа
{ 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 МБ, а затем, как и раньше, добавит символ новой строки.

2
28.01.2020, 05:07
  • Читать из /dev/urandom.
  • Отфильтруйте символы, которые вы не хотите иметь в строке, такие как символы новой строки, нулевые байты, любые другие управляющие символы и т. д.
  • Остановиться на желаемом количестве байтов или символов.
  • Добавить символ новой строки.

Например, иметь 1 000 000 печатных символов ASCII:

{ </dev/urandom \
  LC_ALL=C tr -dc ' -~' |
  head -c 1000000 &&
  echo
} >/sdcard/file.txt 
2
28.01.2020, 05:07

Теги

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