Saya sangat mengetahui utilitas source
(alias .
), yang akan mengambil konten dari file dan menjalankannya di dalam shell saat ini.
Sekarang, saya mengubah beberapa teks menjadi perintah shell, dan kemudian menjalankannya, sebagai berikut:
$ ls | sed ... | sh
ls
hanyalah contoh acak, teks aslinya bisa apa saja. sed
juga, hanya contoh untuk mengubah teks. Yang menarik adalah sh
. Saya menyalurkan apa pun yang saya punya sh
dan menjalankannya.
Masalah saya adalah, itu berarti memulai sub shell baru. Saya lebih suka menjalankan perintah dalam shell saya saat ini. Seperti yang bisa saya lakukan dengan source some-file
, jika saya memiliki perintah dalam file teks.
Saya tidak ingin membuat file temp karena terasa kotor.
Sebagai alternatif, saya ingin memulai sub shell saya dengan karakteristik yang sama persis dengan shell saya saat ini.
memperbarui
Oke, solusi menggunakan backtick pasti berhasil, tetapi saya sering perlu melakukan ini saat saya memeriksa dan mengubah output, jadi saya lebih suka jika ada cara untuk menyalurkan hasilnya menjadi sesuatu pada akhirnya.
pembaruan menyedihkan
Ah, /dev/stdin
benda itu terlihat sangat cantik, tetapi, dalam kasus yang lebih kompleks, tidak berhasil.
Jadi, saya punya ini:
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin
Yang memastikan semua .doc
file memiliki ekstensi yang lebih rendah.
Dan yang kebetulan, bisa ditangani xargs
, tapi bukan itu intinya.
find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv
Jadi, ketika saya menjalankan yang pertama, itu akan langsung keluar, tidak ada yang terjadi.