Строка ECHO с VAR, которая содержит несколько строк

Изменение и настройка обоев для входа в Kali 2.0 - это трехэтапный процесс. I Я не уверен, что это полезно для пользователей Kali 1.0. Попав в терминал

  1. Найдите разрешение текущего образа входа в систему. Для этого вы можете использовать следующую команду.

    eog /usr/share/gnome-shell/theme/KaliLogin.png

    В средстве просмотра изображений посмотрите на нижний левый угол, чтобы увидеть разрешение.

  2. Как только вы получите разрешение, убедитесь, что ваше замещающее изображение имеет этот размер и, что более важно, в формате png. Затем переместите изображение, чтобы заменить существующее изображение, используя команду ниже.

    mv /path/to/your/image/image_name.png /usr/share/gnome-shell/theme/KaliLogin.png

  3. Это необязательный шаг. Перезагрузите компьютер, чтобы убедиться, что новое изображение идеально вписывается в экран входа в систему. Если нет, запустите приведенную ниже команду в терминале

    gnome /usr/share/gnome-shell/theme/gnome-shell.css

    Это откроет (в текстовом редакторе) таблицу стилей каскада, которая поможет вам установить настройки фонового изображения для экрана входа в систему. В этом файле найдите следующие строки

    #lockDialogGroup { background: # 2e3436 url (KaliLogin.png); background-repeat: no-repeat; background- size: cover; }

Измените размер фона на , содержащий . Сохраните и закройте файл css и перезагрузите компьютер.

0
01.11.2018, 14:57
5 ответов

Попробуйте:

sed 's/^/hello there is /' file1.txt > final.sh

Или если вам нужно использовать переменную:

printf '%s\n' "$var" | sed 's/^/hello there is /' > final.sh

Если вы не возражаете против потери пустых строк, вы также можете сделать:

IFS='
' # split on newline
set -o noglob # disable glob
printf 'hello there is %s\n' $var > final.sh # invoke split+glob

По вашей актуальной проблеме:

sed "s/.*/UPDATE ownership SET library_id = 'u-wl' where doc_id = '&';/" < file1.txt |
  sqlite "$PLAY_DB_DIR/library.db"

(обратите внимание, что предполагается, что записи в файлах не содержат 'или других специальных последовательностей байтов в языке sqlite. Если вы не можете получить эту гарантию, в лучшем случае это будет уязвимость внедрения sqlite ).

Или если вам нужно вывести шелл-код для последующего выполнения:

{
  echo 'sqlite "$PLAY_DB_DIR/library.db" << "EOF"'
  sed "s/.*/UPDATE ownership SET library_id = 'u-wl' where doc_id = '&';/" < file1.txt
  echo EOF
} > final.sh

Что на вашем образце дает:

sqlite "$PLAY_DB_DIR/library.db" << "EOF"
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'bibi.toto';
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'jaja.bubu';
UPDATE ownership SET library_id = 'u-wl' where doc_id = 'vrtegbvtr.rvgtbtdtbvtd';
EOF

Или если у вас есть для запуска одной sqliteкоманды на запрос:

repl=$(cat << "EOF"
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\\''u-wl'\\'' where doc_id = '\\''&'\\'';'
EOF
)
sed "s@.*@$repl@" < file1.txt > final.sh

(на этот раз в дополнение к уязвимости внедрения sqlite,это становится уязвимостью выполнения произвольной команды, если файл может содержать символы одинарной кавычки ).

На вашем образце это дает:

sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''bibi.toto'\'';'
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''jaja.bubu'\'';'
sqlite "$PLAY_DB_DIR/library.db" 'UPDATE ownership SET library_id = '\''u-wl'\'' where doc_id = '\''vrtegbvtr.rvgtbtdtbvtd'\'';'
2
28.01.2020, 02:23

Как насчет

$ readarray -t X <file
$ IFS=$'\n'
$ echo "${X[*]/#/hello there is }"
hello there is bibi.toto
hello there is jaja.bubu
hello there is vrtegbvtr.rvgtbtdtbvtd
1
28.01.2020, 02:23

пр1:

for i in $ (cat file.txt ); делать; echo "привет, есть $i"; сделано

привет есть биби.тото

привет есть jaja.bubu

привет есть vrtegbvtr.rvgtbtdtbvtd.

вот пример с циклом for!

пр2:

при чтении linha; do echo "привет, это $linha"; сделано < файл.txt

привет есть bibi.toto

привет есть jaja.bubu

привет есть vrtegbvtr.rvgtbtdtbvtd

поэтому он получает каждую строку файла file.txt

0
28.01.2020, 02:23

Спасибо всем за помощь, особенно @Stéphane Chazelas и @noob. Мой вопрос можно закрыть, команда Стефана в основном работает, но оболочка, в которой должен работать скрипт, довольно странная (проблема с EOF )...

Поскольку первый пример команды от noob немного прост, он работает. Я так использовал свои вары:

for i in $(cat $file1); do echo "text blabla $i blabla" >> $file2; done

Еще раз всем спасибо.

0
28.01.2020, 02:23

while read -r var; do echo hello this is $var; done < file1.txt > final.shдолжен делать то, что вы хотите. Это предполагает оболочку ash, которая, как я полагаю, находится в busybox. При этом используется встроенная функция readдля чтения файла построчно в var.

Эквивалентная bashреализация будет выглядеть так

while read -r; do echo hello this is ${REPLY}; done < file1.txt > final.sh

, который использует встроенную функцию bashread.

0
28.01.2020, 02:23

Теги

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