Cara Menggunakan xargs di bash/shell Linux
xargs dapat mengambil output dari perintah lain, dan menjadikan sebagai parameter input dari proses tersebut.
Data stream di Linux terdiri dari, standard input stream (stdin), standard output stream (stdout), dan standard error stream (stderr). Baik stdin, stdout, dan stderr semua dalam bentuk text.
Keunggulan dari Linux, dengan bantuan pipe command ( | ) dapat mengirim stdout menjadi stdin hanya dalam 1 perintah.
xargs, selain menerima input dari pipe command, juga dapat menerima input dari text file. Hal paling lazim adalah menyandingkan perintah awk untuk memformat output dengan xargs.
Contoh Penggunaan xargs pada syntax docker:
Berikut ini syntax docker beserta tampilan output dari perintah tersebut
docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*"
Dari hasil output tersebut, kita coba pipe dengan xargs
docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | xargs
1 2 3 | [root@ip-xxxxx ~]# docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | xargs REPOSITORY TAG IMAGE ID CREATED SIZE asia-southeast2-docker.pkg.dev/prj-stg-services4b4bb6/ism-repo/ecm-admin-bo stg3-24 664b8a19b016 5 days ago 400MB asia-southeast2-docker.pkg.dev/prj-stg-services4b4bb6/ism-repo/ecm-admin-bo-web stg3-24 d6bc4fa5e3db 7 days ago 179MB [root@ip-xxxxx ~]# |
Misalkan, kita ingin membuat script untuk menghapus seluruh image docker dalam 1 line, bisa
docker image ls -f "reference=*/*/*/ecm-admin-bo*:stg*-*" | awk '{print $1 ":" $2}'| tail -n +2 | xargs docker rmi
Dengan menambahkan awk '{print $1 ":" $2}' maka output yang akan dikirim ke xargs adalah hanya kolom 1 dan 2, atau kolom repository dan kolom tag. Sedangkan fungsi tail -n +2 hanya untuk melewati baris 1 atau judul kolom.
Gunakan xargs dengan Konfirmasi
Jika tanpa adanya tambahan argumen maka, setiap syntax dijalankan, maka linux akan menjalankan seluruh script tanpa pemberitahuan.
Gunakan argumen -p agar script tidak dijalankan, sebelum menerima respon 'y' atau 'Y'. Selain itu akan dianggap dengan n.
echo 'satu dua tiga' | xargs -p touch
1 2 3 | [root@ip-xxxxx ~]# echo 'satu dua tiga' | xargs -p touch touch satu dua tiga ?... [root@ip-xxxxx ~]# |
Gunakan xargs dengan Multiple Command
Kita dapat menggunakan multiple command pada xargs, dengan menambahkan argumen -I. Dengan adanya -I (initial arguments atau dikenal juga replace-string) maka setiap simbol yang didefinisikan, akan digantikan nilainya dari hasil output.
1 2 3 4 5 | [root@ip-xxxxx tes]# more dir.txt dir_satu dir_dua dir_tiga [root@ip-xxxxx tes]# |
more dir.txt | xargs -I % sh -c 'echo %; mkdir %'
Jika dijabarkan, berikut arti dari script tersebut:
- more dir.txt -- push content dari dir.txt sebagai argumen xargs
- xargs -I % -- string simbol yang didefinisikan adalah tanda %
- sh -c -- jalankan perintah shell
- echo %; mkdir % -- setiap tanda % akan digantikan dengan nilai dari content dir.txt
Komentar
Posting Komentar