Harap dicatat bahwa tr -s ' '
opsi tidak akan menghapus satu spasi pun di depan. Jika kolom Anda rata kanan (seperti ps
pid) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
Kemudian pemotongan akan menghasilkan baris kosong untuk beberapa bidang tersebut jika itu adalah kolom pertama:
$ <previous command> | cut -d ' ' -f1
19645
19731
Kecuali jika Anda mendahului dengan spasi, tentu saja
$ <command> | sed -e "s/.*/ &/" | tr -s " "
Sekarang, untuk kasus nomor pid ini (bukan nama), ada fungsi yang disebut pgrep
:
$ pgrep ssh
Fungsi shell
Namun, secara umum sebenarnya masih memungkinkan untuk menggunakan fungsi shell secara ringkas, karena ada hal yang rapi tentang read
perintah tersebut:
$ <command> | while read a b; do echo $a; done
Parameter pertama untuk dibaca,, a
memilih kolom pertama, dan jika ada lebih banyak, yang lainnya akan dimasukkan b
. Akibatnya, Anda tidak membutuhkan lebih banyak variabel daripada jumlah kolom +1 Anda .
Begitu,
while read a b c d; do echo $c; done
kemudian akan menampilkan kolom ke-3. Seperti yang ditunjukkan dalam komentar saya ...
Pembacaan beralur akan dieksekusi di lingkungan yang tidak meneruskan variabel ke skrip pemanggil.
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
Solusi Array
Jadi kami kemudian berakhir dengan jawaban oleh @frayser yang menggunakan variabel shell IFS yang defaultnya ke spasi, untuk membagi string menjadi array. Ini hanya berfungsi di Bash. Dash dan Ash tidak mendukungnya. Saya mengalami kesulitan untuk membagi string menjadi beberapa komponen dalam Busybox. Cukup mudah untuk mendapatkan satu komponen (misalnya menggunakan awk) dan kemudian mengulanginya untuk setiap parameter yang Anda butuhkan. Tetapi kemudian Anda akhirnya berulang kali memanggil awk di baris yang sama, atau berulang kali menggunakan blok baca dengan gema di baris yang sama. Yang mana tidak efisien atau cantik. Jadi Anda akhirnya membelah menggunakan ${name%% *}
dan seterusnya. Membuat Anda merindukan beberapa keterampilan Python karena sebenarnya skrip shell tidak lagi menyenangkan jika setengah atau lebih fitur yang biasa Anda gunakan, hilang. Tetapi Anda dapat berasumsi bahwa bahkan python tidak akan diinstal pada sistem seperti itu, dan itu bukan ;-).