Saya memiliki alias yang meneruskan beberapa parameter ke alat yang sering saya gunakan. Kadang saya berlari seperti diri saya sendiri, kadang di bawah sudo. Sayangnya, tentu saja, sudo tidak mengenali alias.
Adakah yang punya petunjuk tentang cara melewati alias?
Dalam hal ini, saya memiliki banyak opsi untuk perl ketika saya sedang melakukan debug:
alias pd='perl -Ilib -I/home/myuser/lib -d'
Terkadang, saya harus men-debug alat saya sebagai root, jadi, bukannya menjalankan:
pd ./mytool --some params
Saya perlu menjalankannya di bawah sudo. Saya sudah mencoba banyak cara:
sudo eval $(alias pd)\; pd ./mytool --some params
sudo $(alias pd)\; pd ./mytool --some params
sudo bash -c "$(alias pd)\; pd ./mytool --some params"
sudo bash -c "$(alias pd); pd ./mytool --some params"
sudo bash -c eval\ "$(alias pd)\; pd ./mytool --some params"
sudo bash -c eval\ "'$(alias pd)\; pd ./mytool --some params'"
Saya berharap cara yang bagus dan ringkas untuk memastikan bahwa alias pd saya saat ini sepenuhnya digunakan (kalau-kalau saya perlu mengubahnya nanti), meskipun beberapa upaya saya tidak ringkas sama sekali. Pilihan terakhir saya adalah memasukkannya ke dalam skrip shell dan meletakkannya di suatu tempat yang bisa ditemukan oleh sudo. Tapi terkadang alias sangat berguna, jadi ini pilihan terakhir.
A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
sudo
lagi, sementara ingin menjagasudo
trik -passthrough pada saat yang sama. Bahkan ini bisa dilakukan: untuk menggunakan opsi lagi, gunakan\sudo
. Garis miring terbalik akan menimpa alias. (Banyak yang sepertinya tidak tahu tentang itu). Dengan cara ini, Anda dapat ( bahaya! ) Bahkan menghapus file tanpa peringatan apa pun , mengesampingkan yangalias rm='rm -i'
umum ditentukan.bash-aliases
, hanya dengan mengetik\rm file-to-delete
.Saya tidak begitu jelas tentang apa yang Anda coba lakukan. Saya bisa melihat dua cara:
Jalan yang benar
alias pd='sudo perl -Ilib -I/home/myuser/lib -d'
Kemudian mengeksekusi
pd ./mytool
akan menjalankan perintah debug Anda sebagai root tetapi masih mempertahankan manfaat sudo (jejak audit, tidak beroperasi dari shell root).Contoh:
Cara Mudah
Tambahkan alias ke root
.bashrc
dan gunakansudo -i
kapan saja Anda sudo untuk root.sumber
Hanya punya dua alias dan gunakan variabel
Saya tidak melihat alasan untuk menggunakan
awk
ataucut
kecuali itu hanya untuk memiliki alias inti yang didefinisikan sekali untuk membuatnya lebih mudah untuk dimodifikasi. Jika itu masalahnya, maka ini berfungsi:Berikut adalah fungsi sederhana untuk membuat pasangan alias seperti yang di atas:
Menggunakan:
Sekarang Anda memiliki
pd
danspd
plusct
dansct
.sumber
Saya berharap saya dapat menandai dua jawaban sebagai "benar". Menggabungkan Jalan yang Benar dari posting Insyte , um, penuh wawasan, dengan solusi awk (atau cut) dari Bill Weiss , saya datang dengan ini:
Sekarang saya hanya akan pergi dan memasukkan ini ke dalam fungsi shell di .bashrc saya atau sesuatu, dan kemudian membuat versi "s" dari semua alias saya yang ingin saya jalankan sebagai root.
Pembaruan : sedikit modifikasi dari fungsi sederhana Dennis Williamson untuk membuatnya sedikit lebih mudah digunakan:
Ini berarti saya harus meletakkan "s" di depan seluruh perintah. Dari pada:
Saya hanya menambahkan s di bagian depan.
Dan saya sudah selesai. Tentu, komputer bekerja sedikit lebih banyak, tetapi untuk itulah komputer itu digunakan. :-)
Terima kasih!
sumber
alias sudo="sudo "
bekerja dengan sempurna.dari http://www.shellperson.net/using-sudo-with-an-alias/
sumber
Bukankah lebih mudah untuk meretas skrip yang menyertakan opsi Anda, lalu letakkan di suatu tempat di salah satu folder yang merupakan jalur untuk akun dan root biasa? Ini benar-benar tidak akan membutuhkan banyak naskah.
sumber
Ini kasar, tetapi berfungsi di sini:
sumber
Tambahkan awalan "sudo" ke alias yang dipilih DAN perintah dari dalam
~/.bashrc
seperti Anda :sumber
alias sudo="sudo "
lebih mudah.Seperti yang diposting beberapa kali, lakukan di '.bashrc':
alias sudo = 'sudo'
Alasan mengapa dijelaskan dalam 'man bash' dan 'help alias':
alias: alias [-p] [nama [= nilai] ...] Tentukan atau tampilkan alias.
sumber
Anda menginginkan sesuatu seperti ini:
sumber
bash -i
(i = interaktif) hanya v4.0. Jadi pada server lama yang masihbash
menjalankan v3, ini kemungkinan besar akan gagal. Tapi buktikan saya salah, siapapun, silakan;)-i
adalah Bourne shell, lihat: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html#!/bin/bash -i
setelah shebang, yang ternyata tidak sama (?). Untuk memotong cerita panjang pendek, menggunakanhistory
dalambash
naskah (dan bukan pada "hidup" baris perintah) akan membutuhkan-i
pilihan, yang saya tidak mampu untuk mendapatkan bekerja pada server dengan "hanya"bash
v3 diinstal. Dan itu fakta.Saya tidak tahu apakah itu hal paling bijak untuk dilakukan di kotak produksi tetapi secara lokal saya gunakan
sumber
Bisakah Anda menambahkan alias ke root .bashrc atau hanya menjalankan .bashrc melalui sudo sebelum perintah Anda?
sumber