aracılığıyla Bir bash komut dosyasında bir dosyada başka bir dizeyle boşlukları olan bir dizeyi değiştirmeniz gerekir; burada tüm çağrılar komutu yazan bir işlev aracılığıyla yapılmalıdır bir günlük dosyasına ve sonra komutu çalıştırır. Logrun işlevi, komutta okumak için özel karakter [email protected]
kullanır. Değiştirmek için sed kullanıyorum ama ifade parametresindeki boşluklara sahip sed komutu [email protected]
'dan geçtiğinde boşluklardan kurtulmanın bir yolunu bulamıyorum.
ben a b c ile cdeğiştirilmesi için sed kullanmak komut test etmek için sorunu kolaylaştırmıştır. inşaat büyük test1.sh
:
#!/bin/bash
TESTFILE=/tmp/test.txt
echo "a c" > $TESTFILE
sed -i -e 's/a c/a b c/' $TESTFILE
test2.sh başarısız:
#!/bin/bash
function logrun() {
[email protected]
$CMD
}
TESTFILE=/tmp/test.txt
echo "a c" > $TESTFILE
logrun sed -i -e 's/a c/a b c/' $TESTFILE
Sonuç: Hatanın nedeni, uzay (ler) de olduğu
sed: -e expression #1, char 3: unterminated `s' command
-e ifadesi. Bu işlevle sed çağırmak için bir yol bulamadım. Tek tırnak yerine çift tırnak kullanmayı ve ters eğik çizgi vb. Boşluklardan kaçmayı denedim. Bunu yapmak için doğru yolun ne olduğunu bulmak beni çok merak ediyor.
@Barmar Sen kapattığınız birkaç soru: // stackoverflow. com/sorular/13365553/ayar-an-argüman-ile-bash. Daha kanonik bir kopya bulmak güzel olurdu. Bu sorunun, özellikle de bu yazıya hiç de değinmeyen $ @ 'ile ilgili sorduğu bir kişi için ayrıştırılması biraz zor. –
Bir noktada dediniz, ve kaldırıldığından beri, "** Not: ** logrun işlevini değiştirmem gerekiyor.", Bu nedenle işlevi değiştirmek tamam mı? – user3439894
@ user3439894 İşlevi değiştirmeden yapabilir misiniz? Bunun mümkün olup olmadığını bilmek isterim. – talamaki