HERE dosyasını kullanın ve komut çıktısını yeniden yönlendirin


11

Bir toplu iş komut dosyasında aşağıdaki kodu var:

mpirun -np 6 ./laplace <<END
100
100
100
0.01
100
3
2
1
END
| tail -n 1 > output

Ama işe yaramıyor. Ne yapmak istiyorum mpirun komutuna giriş olarak HERE dosyasını kullanmak ve daha sonra kuyruk komutuna çıktı boru kullanmaktır. Ancak, ben HERE dosya ve kuyruk çıktı şeyler karışıyor düşünüyorum.

İstediğimi yapması için bunu nasıl yazmalıyım?

Yanıtlar:


12

İlk satırda yazdıklarınız tam bir komut gibi görünür (kabuk terminolojisinde bir “(bileşik) liste”). Burada belge başlangıç ​​işareti ( <<END) olduğundan, kabuk burada belge içeriğini okur ve sonra yeni bir komut başlatır. Bu belgeyi bir listenin ortasına koymak istiyorsanız, kabuğa listenin bitmediğini belirtmeniz gerekir. İşte birkaç yol.

mpirun -np 6 ./laplace <<END |

END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END

END
} | tail -n 1 > output

Veya, elbette, komutun ilk satıra tamamen sığdığından emin olabilirsiniz.

mpirun -np 6 ./laplace <<END | tail -n 1 > output

END

Hatırlanması gereken kural, bu belgedeki içeriğin, <<ENDgöstergeden sonraki ilk tırnaksız yeni satırdan sonra başlamasıdır . Örneğin, bu komut dosyasını yazmanın başka bir gizli yolu:

mpirun -np 6 ./laplace <<END \
| tail -n $(

END
             echo 1) > output

Bu sonuncusu! "gizlenmiş" .. Şaka yapmıyorsun! :) .. Ben zor newline fikri tökezledi, ama aslında bizzare üzerinde bu gibi köşeli bir blok ikiye bölmek için .. Bu tasarım tarafından, ya da tesadüfi bir abartı ?. (örneğin, bunun için gerçek bir kullanım var mı? ... ve hatta bu ilk "yumuşak" satıra birden çok
noktalı

@fred: Sadece tesadüfî bir sapma. Yorumlu belgenin nerede başladığı ve durduğu konusunda bir kural olmalıdır. Burada kural, yorumlu yorumun bittikten sonra bir sonraki satırsonu belirtecine eklenmiş tek bir belirteç gibi olmasıdır <<END. Ters eğik çizgi-yeni satır, satır sonunu geçersiz kılar.
Gilles 'SO- kötü olmayı bırak'

7
mpirun -np 6 ./laplace <<END | tail -n 1 > output
100
100
100
0.01
100
3
2
1
END
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.