web-gelistirme-sc.com

Shell - Bir dosyaya değişken içerikleri yaz

Bir değişkenin içeriğini (burada var olarak adlandırılır) bir dosyaya kopyalamak istiyorum.

Dosyanın adı başka bir değişkende saklanır destfile.

Bunu yaparken sorun yaşıyorum. İşte denedim:

cp $var $destfile

Aynı şeyi dd komutuyla da denedim ... Açıkçası Shell, $var'in bir dizine gönderme yaptığını düşündü ve bu yüzden bana dizinin bulunamadığını söyledi.

Bunu nasıl çözebilirim?

74
user1546083

echo komutunu kullanın:

var="text to append";
destdir=/some/directory/path/filename

if [ -f "$destdir" ]
then 
    echo "$var" > "$destdir"
fi

if, $destdir’in bir dosyayı temsil ettiğini test eder.

>, dosyayı kırptıktan sonra metni ekler. Yalnızca mevcut içeriği dosyaya $var içindeki metni eklemek istiyorsanız, bunun yerine >> kullanın:

echo "$var" >> "$destdir"

cp komutu bir dosyaya metin yazmak için değil, dosyaları (dosyalara) kopyalamak için kullanılır.

108
pb2q

echo, var, -e gibi bir şey içeriyorsa bayrak olarak yorumlanacağını bildiriyor. Başka bir seçenek printf, ancak printf "$var" > "$destdir", değişkende kaçan karakterleri genişletir, böylece değişken ters eğik çizgiler içeriyorsa, dosya içerikleri eşleşmez. Bununla birlikte, printf yalnızca biçim dizesindeki ters eğik çizgileri çıkış olarak yorumladığı için, tam değişken içeriğini hedef dosyaya depolamak için %s format belirticisini kullanabilirsiniz:

printf "%s" "$var" > "$destdir"

21
Trebawa

Değişkeninizde yukarıdaki cevapların hiçbiri işe yaramaz:

  • -e ile başlar
  • -n ile başlar
  • -E ile başlar
  • \ ve ardından n içeriyor
  • eklenmiş yeni bir satır içermemeli

ve böylece keyfi dizge içerikleri için güvenilmezler.

Bash'te "here strings" i kullanabilirsiniz:

cat <<< "$var" > "$destdir"
14
Eric

Seni doğru anladıysam, bir dosyaya $var kopyalamak istiyorsan (eğer bir dizge ise).

echo $var > $destdir
8
qwertz

"Bir değişkenin içeriğini kopyala" deyince, bu değişken bir dosya adı içeriyor mu, yoksa bir dosya adı içeriyor mu?

Sorunuza göre $var, dosyaya kopyalamak istediğiniz içindekiler içeriyor:

$ echo "$var" > "$destdir"

Bu, $ var değerini $ destdir adlı bir dosyaya ekleyecektir. Tırnaklara dikkat edin. "$ Var" ifadesinin tırnak işaretleri içine alınması çok önemlidir. Ayrıca adında bir boşluk varsa "$ destdir" için. Eklemek için:

$ echo "$var" >> "$destdir"
0
David W.