LINUX.ORG.RU

команда printf

 , ,


0

2

Доброго времени суток! Есть такая проблема, с помощью команды printf ввожу данные в выполняемую команду:

printf '%s\n' 'D' '2' 'test_cnt' | /opt/itcs/bin/command
Первый символ вводит отлично нажимается enter, на втором символе начинается постоянное просьба ввода цифры, что подскажите, как с этим быть? Если есть какие нибудь альтернативы для реализации подобного действа то подскажите пожалуйста. Спасибо !

Ответ на: комментарий от galiullinainur

Примерно так

cat file|command

Бывалые башеводы знают больше способов, я с наскока только это вспомнил. Еще как-то вообще без файла передавать многострочный текст можно, если вспомню, то напишу.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Можно шебанг указать как #!/path/to/command и писать команды прямо в этот файл. Но это только для тех программ работает, которые заранее рассчитаны на такой способ запуска. Еще они требуют указывать параметр, заставляющий их читать из файла. Так можно оформлять, например, sed-, awk-, fdisk-, grep-скрипты.

yars068 ★★★★
()

Вероятно, программа вычитывает всё что ей записали в stdin за один раз, и выкидывает всё до перевода строки, поэтому D проходит, а всё остальное теряется. Нужно писать скрипт для expect, а не просто на stdin всё вываливать одной пачкой.

d_a ★★★★★
()
Ответ на: комментарий от conformist

Наверное в виду имелось

/opt/itcs/bin/command <file.txt
, но это, боюсь, не заработает по той же причине, что и printf.

d_a ★★★★★
()
Ответ на: комментарий от d_a

А каким еще образом можно ввести с помощью скрипта данные в выполняемую команду?

galiullinainur
() автор топика
Ответ на: комментарий от galiullinainur

В интернете миллион же ссылок по запросу expect linux, и на русском языке тоже. Вот хоть с википедии пример:

   #!/usr/bin/expect
   # Открыть ftp-сессию на удалённом сервере, и ждать запроса имени пользователя.
   spawn ftp $remote_server
   expect "username:"
   # Послать имя пользователя, и ждать приглашения ввода пароля.
   send "$my_user_id\r"
   expect "password:"
   # Послать пароль, и ждать приглашения ввода ftp.
   send "$my_password\r"
   expect "ftp>"
   # Переключиться в бинарный режим, и снова ждать приглашения ввода ftp.
   send "bin\r"
   expect "ftp>"
   # Выключить приглашение ввода.
   send "prompt\r"
   expect "ftp>"
   # Получить все файлы
   send "mget *\r"
   expect "ftp>"
   # Закончить ftp-сессию и ждать спецсимвол конца файла (eof).
   send "bye\r"
   expect eof

d_a ★★★★★
()
Ответ на: комментарий от conformist

Да нет, ничего... Тоже что-ли какую-нибудь не имеющую отношения к вопросу строчку запостить. А вот:

printf '%q\n' "$(/opt/itcs/bin/command)"
Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Ну почему же не имеющую? ОП хочет как-то в скрипте передать аргументы:

А из файла всё это катом передать не вариант?
а как это можно сделать? я не очень то хорошо разбираюсь в bash

вот можно таким способом. Разве нет?

conformist ★★★
()
Ответ на: комментарий от conformist

вот можно таким способом. Разве нет?

А! Вы, знаете особенности реализации /opt/itcs/bin/command?

Я-то подумал, что это вообще placeholder, а не конкретная программа.

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Я собрал себе libastral и почитал тему

ввожу данные в выполняемую команду

вроде похоже на какую-то программу.

conformist ★★★
()
Ответ на: комментарий от sigurd

Всем спасибо за ответы) В итоге проблему решил следующим образом

#!/bin/bash
requets_name=$1
cnt_name=$2
screen -dmS create_cert /opt/itcs/bin/certreq new --inf_file /opt/itcs/share/certreq/full.inf --req_file /home/tester/$requets_name.p10
sleep 1
screen -S create_cert -p 0 -X stuff "D$(printf \\r)"
sleep 1
screen -S create_cert -p 0 -X stuff "1$(printf \\r)"
sleep 1
screen -S create_cert -p 0 -X stuff "$cnt_name$(printf \\r)"
sleep 1
screen -S create_cert -p 0 -X stuff "11111111$(printf \\r)"
sleep 1
screen -S create_cert -p 0 -X stuff "11111111$(printf \\r)"
search=$(find /home/tester/ -name $requets_name.p10 | wc -l)
if [[ $search -eq 1 ]]; then 
		echo result="request file is created"
		exit 0
	else 
		echo result="file_not_found"	
		exit 1
fi
exit $?

galiullinainur
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.