Bunun gibi bir şeye 1,5 saat harcadığıma inanamıyorum. Ben bir dosya greps, bir değişken içinde çıktı depolar ve değişken STDOUT ecse bir çok basit kabuk komut dosyası yazıyorum.grep iç kabuk betiğini kullanma dosyada hata bulunamıyor
Komut satırındaki regex ile grep komutunu kontrol ettim ve iyi çalışıyor. Ancak bazı sebeplerden dolayı grep komutu kabuk betiği içinde çalışmaz.
#!/bin/bash
tt=grep 'test' $1
echo $tt
aşağıdaki komutla bu koştum:
benım yazdım kabuk script ./myScript.sh testingFile
. Sadece boş bir çizgi basıyor.
- Daha önce chmod kullandım ve betiği çalıştırılabilir yaptım.
- PATH değişkeninin içinde
/bin
olduğunu kontrol ettim. echo ${tt}
-
tt=grep 'test' "$1"
hiç komut satırı argümanı kullanarak ve adını hardcoding Değil:echo $SHELL
Benim çaresizlik içinde/bin/bash
- verdiğini
- Doğrulanmış, ben tüm kombinasyonları denedi dosya
tt=grep 'test' testingFile
- Bunu buldum: grep fails inside bash script but works on command line ve hatta olası tüm taşıma iadelerini kaldırmak için
dos2unix
kullandı. - Ayrıca, grep seçeneklerinden herhangi birini kullanmaya çalıştığımda, örneğin:
tt=grep -oE 'test' testingFile
, bir hata iletisi alıyorum:./out.sh: line 3: -oE: command not found
. - Bu delilik.
#!/usr/bin/env bash test=$(grep 'foo' "$1") echo "$test"
Komut ikamesi komutu kendisi yerine bir komutun çıktısını sağlar:
Yaptığınız şey geçici olarak (yalnızca bu komut için) "tt" ortam değişkenini "grep" dizesine ayarlayarak ve "$ 1" içeriğinden alınan argümanla "test" komutunu çalıştırıyor , ilk komut parametresi) (ve "tt" ortam değişken seti ile) –