Membaca file /proc/self/cmdline di lingkungan Bash memungkinkan sebuah skrip atau proses untuk mengambil argumen baris perintah (command-line arguments) yang digunakan saat proses tersebut pertama kali dieksekusi. Direktori virtual /proc/self selalu merujuk secara dinamis ke direktori proses (PID) dari proses yang sedang mengaksesnya.
Secara default, argumen di dalam file /proc/self/cmdline dipisahkan oleh karakter null (\0 atau byte nol), bukan spasi atau baris baru. Hal ini dirancang agar sistem operasi dapat membedakan argumen yang memiliki spasi di dalamnya dengan pasti. Oleh karena itu, membaca file ini memerlukan penanganan khusus menggunakan utilitas seperti xargs, awk, atau perintah internal Bash.
Metode Pembacaan /proc/self/cmdline di Bash
Berikut adalah tabel perbandingan metode yang paling sering digunakan untuk membaca dan memparsing isi dari /proc/self/cmdline di dalam skrip Bash:
| Metode / Perintah | Kelebihan | Kekurangan |
|---|---|---|
xargs -0 |
Sangat aman menangani argumen dengan spasi; otomatis memecah berdasarkan byte null. | Membutuhkan utilitas eksternal xargs. |
mapfile / readarray |
100% native Bash tanpa memanggil proses eksternal (lebih cepat). | Memerlukan manipulasi string lanjutan untuk mengubah pemisah null menjadi baris baru. |
tr '\0' '\n' |
Sederhana dan mudah dibaca secara visual di terminal. | Gagal jika argumen itu sendiri mengandung karakter baris baru (jarang terjadi pada cmdline). |
Contoh Skrip Praktis
Gunakan blok kode di bawah ini untuk mencetak setiap argumen yang diteruskan ke skrip pada baris terpisah dengan memanfaatkan konversi byte null:
#!/usr/bin/env bash
# Membaca cmdline dan mengubah pemisah null menjadi newline
echo "Daftar argumen proses ini:"
cat /proc/self/cmdline | tr '\0' '\n'
Jika Anda ingin menyimpan setiap argumen ke dalam sebuah array di dalam Bash secara aman, gunakan pendekatan berbasis mapfile berikut:
#!/usr/bin/env bash
# Membaca argumen ke dalam array 'args'
mapfile -d '' args < /proc/self/cmdline
# Menampilkan jumlah argumen dan isinya
for i in "${!args[@]}"; do
echo "Argumen ke-$i: ${args[$i]}"
done
Troubleshooting & Tips Lapangan
Kendala paling sering saat membaca /proc/self/cmdline adalah teks yang bercampur menjadi satu baris panjang tanpa spasi saat dicetak menggunakan cat biasa. Ini terjadi karena terminator aslinya adalah karakter null (\0) yang tidak memiliki representasi visual di terminal standar. Selalu gunakan tr '\0' '\n' atau xargs -0 untuk merapikan output-nya.
Perlu dicatat pula bahwa isi /proc/pid/cmdline dapat dimodifikasi oleh proses itu sendiri di dalam memori Linux (misalnya dengan mengubah variabel argv secara langsung di tingkat bahasa C). Namun, untuk skrip Bash standar, isi file ini akan selalu mencerminkan parameter saat skrip dipanggil.