Команда в одну строку в Linux Bash

#linux #bash #command #exe

#linux #bash #команда #exe

Вопрос:

Я пытаюсь написать базовую однострочную команду Linux Bash, которая выдает все числа от 1 до 1000 в качестве входных данных для exe-программы.

исполняемая программа выглядит следующим образом:

 please insert 1:   1(wanted input)
please insert 2:   2(wanted input)
.
.
.
.
please insert 1000:  1000(wanted input)
success!
  

итак, я попытался написать эту команду Linux bash:

 for((i=1;i<=1000;i =1)); do echo "$i"|./the_exe_file; done
  

но проблема в том, что моя команда ОТКРЫВАЕТ exe-файл на каждой итерации for … что означает, что только первый ввод (1) правильный.
И, по какой-то причине, входные данные, которые передаются в exe-файл, кажутся не очень хорошими.
что я могу сделать? В чем моя ошибка?

Заранее спасибо.

Ответ №1:

Вы просили открывать exe-файл на каждой итерации цикла. Если вам нужно открыть ее только один раз, выньте ее из цикла:

 for((i=1;i<=1000;i =1)); do echo "$i"; done | ./the_exe_file
  

Комментарии:

1. Если это сработало и решило вашу проблему, было бы хорошо, если бы вы отметили ответ как принятый 🙂

Ответ №2:

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

 seq 1 1000 | ./the_exe_file
  

Комментарии:

1. Строго говоря, seq может не быть установлена на текущем компьютере, в то время как bash гарантированно будет доступна на компьютере, на котором выполняется bash скрипт.

2. Верно. Если она есть, я бы ее использовал. Если нет, я бы использовал цикл, а не утруждал себя его установкой. 🙂

Ответ №3:

Попробуйте

 printf '%sn' {1..1000} | ./the_exe_file
  

Ответ №4:

В bash:

 $ for f in {1..1000}; do echo $f; done 
  

для тестирования:

 $ for f in {1..1000}; do echo $f; done  | uniq | wc -l
1000