Sebagai latihan, apakah ada metode untuk mengalihkan string ke file tanpa echo? Saat ini saya menggunakan
echo "Hello world" > test.txt
Saya tahu tentang cat
dan printf
. Saya berpikir sesuatu seperti
> test.txt <<<"Hello world"
Tentu saja ini tidak bekerja, tetapi mungkin perintah yang serupa?
Ada terlalu banyak cara untuk mendiskusikannya yang mungkin tidak anda pedulikan. Anda dapat meretas tentu saja - strace bash, atau melakukan segala macam sihir hitam menjalankan Bash di gdb.
Anda sebenarnya memiliki dua contoh yang sangat berbeda di sana. &<<<<'string'
sudah menulis string ke file. Jika ada yang bisa diterima selain printf
, echo
, dan cat
, anda bisa menggunakan banyak perintah lain untuk berperilaku seperti cat (sed, awk, tee, dll).
$ cp /dev/stdin ./tmpfooblah <<<'hello world'; cat tmpfooblah
hello world
Atau neraka, tergantung pada bagaimana Anda mengkompilasi Bash.
$ enable -f /usr/lib/bash/print print; print 'hello world' >tmpfile
Jika Anda hanya ingin menggunakan string bash dan pengalihan, dalam bash murni, tanpa peretasan, dan tidak ada loadable, itu tidak mungkin. Namun, dalam ksh93, hal itu dimungkinkan.
$ rm tmpfooblah; <<<'hello world' >tmpfooblah <##@(&!()); cat tmpfooblah
hello world
Cara untuk melakukan ini dalam bash adalah
zsh <<< < '> test << < "Hello World!"'
Ini adalah salah satu perbedaan menarik antara zsh dan bash: jika diberikan sebuah unchained >
atau >>>
, zsh memiliki akal sehat untuk menghubungkannya ke stdin, sementara bash tidak. Ini akan sangat berguna - jika itu hanya standar.
Saya mencoba menggunakan ini untuk mengirim & menambahkan kunci ssh saya melalui ssh ke berkas authorized_keys
jarak jauh, tetapi host jarak jauhnya adalah bash, tentu saja, dan diam-diam tidak melakukan apa-apa.
Dan itulah mengapa Anda sebaiknya menggunakan cat
.