Sekme ile ayrılmış bir dosyayı dönüştürmeye ve virgülle ayrılmış bir dosyaya dönüştürmeye çalışan bir bash komut dosyası var. Ben '/tmp/filename.txt' de geçerse aşağıdaki komut donduruyor: There is komut dosyasına gerekBaştan sona Bash dosya adlarını geçiyor ama donuyor
#!/bin/bash
sed 's/ /,/g' /tmp/filename.txt > /tmp/csvFile.csv
:
#!/bin/bash
sed 's/ /,/g' $1 > /tmp/csvFile.csv
Ancak, komut dosyası açıkça dosya adı ilan etmeleri halinde düzgün davranır dosya adını bir komut satırı argümanı olarak alabilmek, böylece tekrar kullanılabilir. Bana yanlış yaptığımı söyleyen var mı?
DÜZENLEME:
Benim 1 $ benim yukarıdaki soruna neden boştu. Hala 1 dolar neden boş olduğunu anlamıyorum. İşte tam betik:
#!/bin/bash
function main {
splitCSV
cat /tmp/output.txt
}
function splitCSV {
sed 's/ /,/g' $1 > /tmp/csvFile.csv
awk -F ',' 'NR > 1 !($2 in facilities) { facilities[$2] } END { for (x in facilities) print x }' /tmp/csvFile.csv > /tmp/output.txt
}
main
Bu tür bir kapsam sorunu olduğunu varsayalım?
'$ 1' boş olmadığından emin misiniz? – anubhava
Haklıydın. 1 $ boştu. Ama anlamıyorum ki, boştu. Bu sorunla ilgili asıl gönderiyi düzenledim. – OnlyDean
Betiği nasıl çağırıyorsunuz? Ve işlevlerin kendi argümanları var. Sorununuzu giderebilecek öneriler almak için http://www.shellcheck.net/ adresinden bu kodu çalıştırın. –