Genellikle, sadece bir argüman geçmemiz gerekir:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
İki argümanı geçmenin bir yolu var mı? Gibi bir şey
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Her iki sonucu da önce bir dosyada saklayabilirim
echo abc > file1
echo xyz > file2
cat file1 file2
Ama sonra yanlışlıkla bir dosyanın üzerine yazabilirim, bu sorun değil. Bu etkileşimli olmayan bir komut dosyasına giriyor. Temel olarak, iki keyfi komutun sonuçlarını cat
bir dosyaya yazmadan geçmek için bir yola ihtiyacım var .
GÜNCELLEME: Üzgünüm, örnek sorunu gizliyor. İken { echo abc ; echo xyz ; } | cat
işe görünüyor, çıkış nedeni olan echo
, s değil cat
.
{ cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
Beklendiği gibi çalışmayan daha iyi bir örnek olabilir .
İle
file1:
a,b
c,d
file2:
1,2
3,4
Beklenen çıktı:
b,1
d,3
RESOLVED:
Proses ikamesi kullan :cat <(command1) <(command2)
Alternatif olarak, aşağıdakileri kullanarak adlandırılmış yöneltmeler yapın mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Daha az zarif ve daha ayrıntılı, ancak temp1 ve temp2'nin elden önce var olmadığından emin olduğunuz sürece iyi çalışır.