Bagaimana cara meneruskan argumen baris perintah ke alias? Berikut ini contohnya:
alias mkcd = 'mkdir $ 1; cd $ 1; '
Tetapi dalam kasus ini $ xx diterjemahkan pada alias membuat waktu dan bukan pada saat runtime. Namun, saya telah membuat solusi menggunakan fungsi shell (setelah sedikit Google) seperti di bawah ini:
function mkcd () { mkdir $ 1 cd $ 1 }
Hanya ingin tahu apakah ada cara untuk membuat alias yang menerima parameter CL.
BTW - Saya menggunakan 'bash' sebagai shell default saya.
mkdir mydirectoryname && cd $_
Jawaban:
Anda menemukan caranya: membuat fungsi alih-alih alias. Shell C memiliki mekanisme untuk melakukan argumen ke alias, tetapi bash dan shell Korn tidak, karena mekanisme fungsinya lebih fleksibel dan menawarkan kemampuan yang sama.
sumber
.bashrc
file. Misalnya # buat alias yang mengambil nomor-port oleh pengguna alias serve = "python -m SimpleHTTPServer $ 1" Setelah melakukan perubahan pada file .bashrc, pastikan Anda memasukkan perintah berikut. ~ $ source .bashrc Anda harus dapat menggunakan ini seperti ini ~ $ serve 8998Hanya untuk mengulangi apa yang telah diposting untuk cangkang lain, di Bash karya-karya berikut:
Menjalankan yang berikut ini:
Memberikan hasil di bawah ini:
sumber
Bash
untuk mengganti$1
dan$2
dengan parameter yang diteruskan ke fungsi. Kutipan tunggal memberi tahu Bash untuk tidak melakukan ini.function blah(){ echo "First: $1"; echo "Second: $2"; }
Anda tidak bisa di ksh, tetapi Anda bisa di csh.
Dalam ksh, fungsi adalah cara untuk pergi. Tetapi jika Anda benar-benar ingin menggunakan alias:
sumber
csh
biasanya bukan apa yang ingin digunakan orang modern. Alias-yang-membuat-fungsi-lalu-mengeksekusi-tipuan fungsi itu relatif populer, tetapi tidak menawarkan manfaat atas fungsi yang tepat sejauh yang saya tahu. (Lagi pula, fungsinya harus mengutip argumennya dengan tepat.) DownvotingMengutip halaman bash man:
Jadi sepertinya Anda telah menjawab pertanyaan Anda sendiri - gunakan fungsi alih-alih alias
sumber
Anda juga dapat menemukan perintah ini berguna:
mkdir dirname && cd $_
di mana dirname adalah nama direktori yang ingin Anda buat
sumber
$_
adalah output dari perintah terakhir unix.stackexchange.com/a/271693/169772Saya menemukan bahwa fungsi tidak dapat ditulis dalam
~/.cshrc
file. Di sini di alias yang membutuhkan argumenmisalnya, argumen diteruskan ke perintah 'temukan'
dimana abc adalah argumen yang diloloskan sebagai!: 1
sumber
!:1
dimaksud. Saya harus gulir ke bawah untuk melihat di sini bahwa itu adalah argumen. Jawaban yang bagus tidak meninggalkan banyak pertanyaan, bahkan jika itu bukan untuk jenis shell OPs.Cara termudah, adalah menggunakan fungsi bukan alias. Anda masih dapat memanggil fungsi kapan saja dari cli. Dalam bash, Anda bisa menambahkan fungsi function () {command} itu memuat sama dengan alias.
Tidak yakin dengan kerang lainnya
sumber
Anda sebenarnya tidak dapat melakukan apa yang Anda inginkan dengan alias Bash, karena alias itu statis. Sebagai gantinya, gunakan fungsi yang telah Anda buat.
Lihat di sini untuk informasi lebih lanjut: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Ya saya tahu ini mactips.org, tapi ini tentang Bash, jadi jangan khawatir.)
sumber
Ini bekerja di ksh:
Opsi "-x" membuat alias "diekspor" - alias terlihat dalam subkulit.
Dan perhatikan fakta bahwa alias yang didefinisikan dalam skrip tidak terlihat dalam skrip itu (karena alias diperluas ketika skrip dimuat, bukan ketika garis ditafsirkan). Ini dapat diselesaikan dengan mengeksekusi file skrip lain dalam shell yang sama (menggunakan dot).
sumber
Saya pikir Anda dapat melakukannya dengan fungsi shell jika Anda menggunakan bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
sumber
count fungsi () {python -c "untuk num in xrange ($ 1): print num";}
sumber
Alias kosong akan menjalankan argumennya:
sumber