Saya tahu ada seperangkat aturan khusus yang memperluas perintah yang diketik pengguna. (mari kita bicara tentang bash shell.)
Apakah mungkin untuk mencetak perintah dalam bentuk setelah ekspansi shell? Tampaknya menjadi utilitas yang baik untuk belajar dan memastikan bagaimana shell memperluas karakter khusus.
misalnya
$ echo *
{all the filenames in current dir}
Saya ingin mencetak perintah yang diperluas, yang merupakan baris berikut:
echo {all the filenames in .}
echo cat * | someprogram
tidak melakukan apa yang Anda pikirkan dari jawaban ini.Anda bisa menggunakannya
set -x
.Misalnya, perhatikan skripnya:
Saat dijalankan, ini menunjukkan
echo
pernyataan yang diperluas sebelum benar-benar menjalankannya:Dan, seperti yang ditunjukkan Kundor, ini juga bekerja secara interaktif pada baris perintah:
Dokumentasi
man bash
menjelaskan apa yangset -x
dilakukan sebagai berikut:Nilai default untuk
PS4
adalah, seperti yang ditunjukkan di atas, tanda tambah diikuti oleh spasi.sumber
Untuk shell interaktif, menekan
Ctrl+x
diikuti oleh*
setelah mengetik pola glob akan mengedit baris perintah Anda dengan pola glob diperluas. Dari halaman bash man:Anda mungkin juga tertarik dengan glob-list-expansions (
Ctrl+x
,g
).sumber
Ctrl+x, *
segera setelah mengetikecho *
dan sebelum menekan tombol enter? Jika masih tidak berhasil, Anda dapat memodifikasi~/.inputrc
dan mengikat glob-expand-word ke sesuatu yang lain.Ctrl+x
diikuti olehShift+8
. Anda dapat mencoba melihat apakahCtrl+x, g
berfungsi, atau, seperti yang saya katakan sebelumnya, tetapkan kunci Anda sendiri dalam.inputrc
file.Jika Anda ingin melihat bagaimana argumen diperluas atau token, Anda dapat menggunakan program atau skrip yang mencetak argumennya. Inilah satu implementasi di
bash
:Dengan asumsi Anda memasukkannya ke dalam file bernama
printargs.sh
(dan membuatnya dapat dieksekusi), maka Anda akan mendapatkan output seperti inisumber