Przekazywanie argumentów do interaktywnego skryptu, który będzie działał w tle

4

Muszę uruchomić program w tle. Wiem, że użycie „&” po komendzie uruchamia komendę w tle.

W następującym skrypcie:

#!/bin/bash
echo amt of time delay nsec
read nano
echo amt of time delay in sec
read sec
echo no.of times
read i
while [ $i -ne 0 ]
do
./nanosleep $sec $nano
./schello
i=$[i-1]
done

Mam kilka danych, które otrzymuję od użytkownika. Czy istnieje sposób, w jaki mogę uruchomić program w tle i podczas wywoływania programu mogę również podać wymagane dane (np. Nano, sec, i) jako argumenty lub w inny sposób?

Bas
źródło

Odpowiedzi:

7

Jeśli Twój skrypt jest wywoływany, powiedzmy test.sh, możesz na przykład:

  • potokuj swój wkład:

    echo -e "1\n2\n3\n" | test.sh &

    gdzie 1, 2i 3są wartościami $nano, $seci, odpowiednio $i.

  • pobrać dane wejściowe z pliku:

    test.sh < arguments.txt &
  • użyj ciągu tutaj:

    test.sh <<< $'1\n2\n3\n' &
Radu Rădeanu
źródło
Pierwszy był więcej niż wystarczający, ale musiał użyć ./test.sh
Bas
1

Inną możliwością jest przekazanie tych zmiennych jako argumentów do skryptu. W twoim skrypcie zamiast

read nano
read sec
read i

...możesz użyć:

nano=$1
sec=$2
i=$3

Zmienne $1, $2, $3, itd. Odpowiadają w pierwszym, drugim, trzecim, itd argumentów w wierszu poleceń. W ten sposób możesz wywołać swój skrypt jako:

test.sh foo bar buz &

Wewnątrz skryptu $1będzie zawierał foo, $2będzie zawierał bar, $3będzie zawierał buzitp.

Malte Skoruppa
źródło