Bagaimana cara saya mem-bypass alias sementara di tcsh?

17

Saya menggunakan tcsh. bash dan zsh dan saran lainnya tidak akan membantu di sini.

Saya memiliki beberapa alias yang diberi nama sama dengan perintah lain, jadi jika saya melakukannya unalias, mengetikkan hal yang sama sekarang akan melakukan sesuatu yang berbeda.

Sebagian besar waktu saya ingin perintah alias, itulah sebabnya saya memilikinya. Namun, terkadang saya menginginkan perintah yang tidak diubah.

Tanpa benar-benar unaliasing dan mendefinisikan ulang perintah, apakah ada cara sederhana untuk memberitahu tcsh untuk menggunakan perintah yang tidak diubah bukan?

Sebagai contoh, vi alias vim, tetapi terkadang saya hanya ingin menggunakan vi. cd alias mengubah judul jendela saya, tetapi kadang-kadang saya ingin membiarkannya sendiri.

Jelas saya bisa mengetik / usr / bin / vi tetapi karena cd adalah perintah built-in shell, tidak ada yang setara. Apakah ada solusi umum?

piCookie
sumber

Jawaban:

29

Anda dapat menggunakan backslash:

% alias ls ls -a
% ls
# ls -a output here
% \ls
# plain ls output here

Untuk shell builtin, ternyata ada gotcha: backslash terdepan mencegah penggunaan alias maupun builtin, tetapi backslash internal hanya menekan alias.

% alias cd pushd
% cd /tmp
/tmp /tmp 
% c\d
% dirs
~ /tmp

(Saya tergoda untuk menyebut argumen lain yang menentang penggunaan cshkeluarga kerang.)

geekosaurus
sumber
Saya terus mendapatkan "perintah: Perintah tidak ditemukan." untuk perintah, dan "cd: Command not found" untuk \ cd. Apakah 'perintah' itu built-in tcsh?
piCookie
desah POSIX keanehan ... ada palsu di /usr/binsini. Tetapi manual mengkonfirmasi bahwa backslash harus berfungsi ... dan ternyata memang berhasil, tetapi Anda harus mengutip karakter dalam untuk mencegah alias sambil tetap mendukung bawaan. BTW, Jika Anda mencoba melakukan sesuatu setelah cd, lihat alias cwdcmddi tcsh(1); ini juga menyelamatkan Anda dari keharusan berurusan dengan pushd/ popddll.
geekosaur
commandbiasanya merupakan built-in di shell POSIX, dan perlu untuk command -[Vv]. Menggunakan backslash untuk mem-bypass alias hanya berfungsi untuk perintah biasa, bukan untuk builtin (karena builtin tidak dapat dikutip dalam (t) csh lebih dari alias bisa).
Gilles 'SANGAT berhenti menjadi jahat'
Tampaknya perintah itu tidak tersedia di sistem saya (selain: bagaimana Anda memformat itu agar menonjol?), Tetapi backslash internal berfungsi untuk saya. Terima kasih!
piCookie
Cheers @geekosaur - Saya tidak tahu tentang perilaku \ ini dan saya pikir ini akan sangat berguna ketika saya mulai menggunakan alias lebih dan lebih sering. :)
boehj
1

awali perintah Anda dengan kata 'command'. Ex.

command ls
Weston Ganger
sumber
1
Apakah ini berfungsi dalam tcsh, sesuai dengan pertanyaannya? Apakah ini berfungsi dengan perintah bawaan?
Dhag
0

Jangan membuat alias yang builtin shell clobber. Hidupmu akan jauh lebih mudah . Ada banyak kombinasi tombol yang tersisa, cobalah cwalias ganti judul jendela :)

Sunting: Solusi dua langkah untuk memperbaiki alias yang bukan milik Anda:

  1. Temukan monyet yang memiliki nama cdlain selain perintah direktori perubahan dan minta pemindahannya ke kolom oped dari koran lokal. Dia seharusnya tidak memegang pekerjaan di mana dia bisa memaksakan ide-ide seperti itu ke kulit orang lain!
  2. echo unalias cd >> ~/.bashrc
Caleb
sumber
Beberapa alias yang saya miliki bukan dari pekerjaan saya sendiri. Saya menghargai saran Anda dan akan melakukan yang terbaik untuk mengindahkannya jika memungkinkan. Sekarang ada yang alias saya ingin bypass, bagaimana saya?
piCookie
Tentu. unalias cd.
Caleb
Jelas, saya tidak jelas sama sekali, Caleb, dan saya minta maaf. Mari kita sebut kasus 'cd' diselesaikan. Saya mencoba mencari tahu bagaimana melakukan ini untuk alias lain tanpa henti. Maaf saya tidak menyinggung itu. Sepertinya backslash internal adalah persis apa yang saya cari.
piCookie
The cdalias mungkin menetapkan judul dan mengubah direktori. Itu adalah praktik yang cukup umum dari hari-hari sebelumnya precmddan PROMPT_COMMAND.
Mikel