Saya ingin mendefinisikan alias yang menjalankan dua perintah berikut secara berurutan.
gnome-screensaver
gnome-screensaver-command --lock
Saat ini saya sudah menambahkan
alias lock='gnome-screensaver-command --lock'
ke .bashrc saya tetapi karena saya mengunci workstation saya begitu sering akan lebih mudah untuk hanya mengetik satu perintah
bash
configuration
yuriel
sumber
sumber
lock()
tanda kurung memberikansyntax error near unexpected token
pesan kesalahan '' ..$1
,$2
... di badan fungsi.Jawaban lain menjawab pertanyaan dengan cukup, tetapi contoh Anda terlihat seperti perintah kedua tergantung pada yang pertama berhasil keluar. Anda mungkin ingin mencoba evaluasi hubung singkat di alias Anda:
Sekarang perintah kedua bahkan tidak akan dicoba kecuali yang pertama berhasil. Deskripsi yang lebih baik dari evaluasi hubung singkat dijelaskan dalam pertanyaan SO ini .
sumber
git fetch && git pull origin master
dan tidak bekerja untuk saya sampai saya diganti&&
dengan;
.Alias dimaksudkan untuk alias nama perintah. Apa pun di luar itu harus dilakukan dengan fungsi.
Alias adalah nama yang masih dikaitkan dengan nama asli.
ll
hanya jenis yang agak spesifikls
.Fungsi adalah perintah baru yang memiliki logika internal. Itu bukan hanya mengubah nama perintah lain. Itu operasi internal.
Secara teknis, alias dalam bahasa shell Bash sangat terbatas dalam kemampuan sehingga mereka sangat tidak cocok untuk apa pun yang melibatkan lebih dari satu perintah . Gunakan mereka untuk membuat mutasi kecil dari satu perintah, tidak lebih.
Karena tujuannya adalah untuk membuat perintah baru yang melakukan operasi yang akan diselesaikan secara internal pada perintah lain, satu-satunya jawaban yang benar adalah dengan menggunakan fungsi di sini:
Penggunaan alias dalam skenario seperti ini mengalami banyak masalah. Berlawanan dengan fungsi, yang dieksekusi sebagai perintah, alias diperluas ke perintah saat ini, yang akan menyebabkan masalah yang sangat tidak terduga saat menggabungkan alias "perintah" ini dengan perintah lain. Mereka juga tidak bekerja dalam skrip.
sumber
gps() { git commit -m 'init '; git push; git status; }
Seperti yang dijelaskan, alias sangat terbatas, rapuh dan satu-satunya maksud mereka adalah mengubah nama perintah. Melecehkan mereka untuk tujuan yang tidak berhubungan akan membuat Anda jatuh dalam air panas, seperti yang baru saja Anda alami.Apakah ini tidak berhasil?
sumber
Ini akan menjalankan 2 perintah satu demi satu:
sumber
Jadi gunakan titik koma:
Ini tidak berfungsi dengan baik jika Anda ingin memberikan argumen ke perintah pertama. Atau, buat skrip sepele di direktori $ HOME / bin Anda.
sumber
Menambahkan 2 sen saya ke diskusi berusia 11 tahun coba ini:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
sumber
Tambahkan fungsi ini ke Anda
~/.bashrc
dan mulai ulang terminal Anda atau jalankansource ~/.bashrc
Dengan cara ini kedua perintah ini akan berjalan setiap kali Anda masuk
lock
ke terminal Anda.Dalam kasus spesifik Anda membuat
alias
mungkin berhasil, tapi saya tidak merekomendasikannya. Secara intuitif kami akan berpikir nilai alias akan berjalan sama seperti jika Anda memasukkan nilai di terminal. Namun bukan itu masalahnya:dan
Jadi jangan gunakan alias kecuali Anda harus melakukannya. https://ss64.com/bash/alias.html
sumber
Saya mendapat masalah saat mendeklarasikan alias
~/.bashrc
. Terminal saya tidak mengenali alias yang saya nyatakan~/.bashrc
. Saya belajar dari artikel (terlampir di bagian bawah) bahwa Mac OS X dijalankanlogin-shell
secara default karena itu ia memanggil~/.bash_profile
bukan~/.bashrc
.Jika Anda mengalami masalah yang sama dalam mendeklarasikan alias Anda, Anda bisa merujuk ke tautan berikut untuk menyelesaikan masalah:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
sumber
source .bashrc
setelah menyimpan perubahan pada file, untuk memungkinkan alias untuk dikenali tanpa keluar.