Używanie równoległego do uruchamiania skryptu bez wprowadzania danych

10

Próbuję uruchomić wiele instancji skryptu z GNU równoległym, ale skrypt nie przyjmuje żadnych argumentów.

Jeśli po prostu uruchomię plik „równoległy foo.sh”, otrzymuję:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
użytkownik1700840
źródło

Odpowiedzi:

10

Zakładając, że chcesz uruchomić dziesięć razy, ta składnia będzie działać:

parallel -n0 foo.sh ::: {1..10}

parallelpotrzebuje sekwencji wejściowej o pewnej długości ( ::: {1..10}) ORAZ musisz zignorować zawartość sekwencji wejściowej ( -n0), zależy tylko na jej długości.

Twoje oryginalne polecenie parallel foo.sh:, nie zawiera sekwencji wejściowej wskazującej, ile chcesz równoległości. To tajemnicze ostrzeżenie mówi ci, że parallelzaczniesz nasłuchiwać terminala dla sekwencji wejściowej i że prawdopodobnie nie jest to to, czego chcesz.

Oto przykład samouczka:

seq 10 | parallel -n0 my_command my_args

Jak to działa:

  • parallelzawsze bierze gdzieś sekwencję wejściową. Może to być sekwencja rozdzielona spacjami, poprzedzona :::OR, lub sekwencja rozdzielona znakiem nowej linii z pliku lub źródła podobnego do pliku, takiego jak potok. W tym przykładzie sekwencja wejściowa pochodzi z potoku.
  • seq 10 tworzy sekwencję cyfr oddzieloną znakiem nowej linii od jednego do dziesięciu.
  • -n0Tekst zawiera równoległe do ignorowania wartości w sekwencji wejściowej. Dbamy tylko o długość sekwencji, a nie jej zawartość. Mimo że cyfry nie są używane, polecenie będzie nadal wykonywane dziesięć razy.

Inny przykład:

parallel -n0 echo -n 'x' ::: {1..5}

Jak to działa:

  • Sekwencja wprowadzania jest wbudowana.
  • {1..5} tworzy rozdzielany spacjami ciąg cyfr od jednego do pięciu.
  • -n0ignoruje wartości sekwencji ( 'x'zamiast tego za każdym razem powtarzamy ciąg znaków ).
  • Wynik: xxxxx

Porównać do:

parallel echo -n ::: {1..5}

Jak to działa:

  • Sekwencja wprowadzania jest wbudowana.
  • {1..5} tworzy rozdzielany spacjami ciąg cyfr od jednego do pięciu.
  • Każda wartość z sekwencji wejściowej jest używana jako argument dla echo. Zamówienie nie jest gwarantowane.
  • Wyjście: 43215. Może to być dowolne zamówienie.
jwfearn
źródło