Mengapa prompt Linux saya menunjukkan $, alih-alih nama dan jalur login?


13

Pada salah satu server saya, promptnya adalah [user @ host path] ... dan saya benar-benar dapat menekan "tab" untuk mengisi path secara otomatis.

Tetapi pada server Ubuntu baru saya, itu hanya tanda dolar?


1
Anda selalu dapat mengetik pwduntuk mencetak nama direktori kerja saat ini. Dan apakah Anda mengatakan bahwa penyelesaian Tab juga tidak berfungsi? (Pada beberapa mesin yang saya gunakan, saya mendapatkan prompt pendek hanya jika saya login sebagai root, dan saya dengan senang hati meninggalkannya di tempat sebagai peringatan yang bagus. Seperti yang jarang terjadi, jika pernah, perlu login sebagai root: Anda tidak menggunakan root , kamu?)
Arjan

Alex dapatkah Anda memberi tahu kami distro apa yang Anda gunakan?
balikkan

Saya menggunakan Ubuntu.
Alex

Ubuntu terbaru? Dan apakah Anda mengatakan bahwa penyelesaian Tab juga tidak berfungsi?
Arjan

Anda tampaknya mengajukan dua pertanyaan: mengapa tidak mengisi tab secara otomatis pada jalur, dan mengapa konfirmasi hanya berupa tanda dolar alih-alih [jalur pengguna @ host]. Agak sulit untuk memilih jawaban karena tidak ada jawaban keduanya.
Joseph Holsten

Jawaban:


27

Karena Anda mengajukan dua pertanyaan, saya akan menjawab keduanya.

Mengapa tab tidak lengkapi file path?

Karena Anda shell tidak mendukungnya, atau penyelesaian tab tidak diaktifkan.

Untuk mengatasinya, Anda harus terlebih dahulu menemukan apa cangkang Anda. Pada mesin yang cangkangnya Anda nikmati, jalankan

echo $SHELL

Anda mungkin melihat kesamaan /bin/bash, atau sesuatu yang kurang umum seperti /bin/tcsh, /bin/zshatau sesuatu yang lain sama sekali.

Sekarang, Anda dapat mengganti shell di mesin Ubuntu. Pada mesin itu, pertama-tama pastikan bahwa shell yang Anda inginkan ada. Karena shell mungkin tidak berada di lokasi yang sama di mesin Ubuntu seperti di yang lain, periksa lokasi dengan mengetik

 which bash

Ini akan memberi Anda jalan shell yang Anda inginkan, sesuatu seperti /bin/bash, /usr/bin/bash, atau /usr/local/bin/bash. Tentu saja, jika Anda ingin shell selain bash, Anda akan mengatakan which tcsh, which zsh, atau serupa.

Jika Anda tidak melihat jalur, tetapi sebaliknya melihat bash not found, maka Anda harus menginstal paket yang sesuai, dan sekali lagi gunakan whichuntuk mencari tahu di mana shell diinstal.

Dengan jalur shell yang Anda pilih, Anda akhirnya dapat mengubah shell Anda dengan menjalankan

chsh -s /bin/bash

mengganti /bin/bashdengan apa pun jalan yang sesuai untuk shell pilihan Anda.

Mengapa prompt merupakan tanda dolar dan bukannya [jalur pengguna @ host]?

Karena variabel lingkungan prompt Anda $PS1, $PS2dan sebagainya. Hal-hal ini cenderung tidak mudah dibawa-bawa, jadi inilah beberapa tautan untuk calon yang mungkin:

bashmemiliki manual yang luas , dengan halaman pada Bash Variables (termasuk PS1, & c) dan Mencetak Prompt (yang menjelaskan PROMPT_COMMAND, nama panjang untuk PS1). Tambahkan baris berikut ke~/.bashrc

export PS1='[\u@\h \w] '

tcshmemiliki manual online (hanya halaman manualnya), dengan bagian tentang variabel lingkungan prompt . Tambahkan baris berikut ke~/.tcshrc

set prompt='[%n@%m %~] '

zshmemiliki panduan pengguna , dengan panduan sederhana untuk prompt , serta manual , dengan referensi yang sangat rinci tentang Perluasan Prompt . Tambahkan baris berikut ke~/.zshrc

export PS1='[%n@%m %~] '

6

Bash bukan satu-satunya shell.

Masalah Anda bisa menjadi masalah sederhana karena tidak memiliki .profile atau .bashrc yang mengatur PS1, atau bisa jadi shell login Anda tidak bash sama sekali.

Bash menggunakan gnu readlineuntuk hal-hal seperti penyelesaian tab. Ini adalah subjek yang rumit dan readline bahkan memiliki file konfigurasi per-pengguna sendiri.

Lihat man bash, man sh, dan man 3 readline. Bash merespons --version. Pada banyak sistem linux, /bin/shsebenarnya bukan bash, tetapi biasanya versi lumpuh ash.


1
bukan dashbukan ash? Saya pikir saya membaca sesuatu seperti ini
knittl

2
+1 karena tidak memiliki .profile atau .bashrc - kecuali Alex awalnya mengatur akunnya ketika ia menginstal Ubuntu, maka secara default, pengguna baru tidak memiliki .bashrc / tidak memiliki set PS1.
Cory Plastek

4

Saya kira, Anda tidak menggunakan bash, tetapi sh dan prompt Anda tidak diatur dengan benar (jika ini bahkan mungkin dengan sh).

Anda bisa mendapatkan shell Anda saat ini dengan mengetik: echo $SHELL

jika Anda ingin memulai bash, ketikkan saja bash


Anda dapat mengatur prompt dengan shell lain. Tidak ada shell yang disebut sh. Echoing $SHELLakan mencetak variabel lingkungan yang disebut SHELL. Variabel lingkungan ini hanya menunjuk ke shell, dan hanya diset oleh bash. Ini kira-kira tidak berguna dalam menentukan shell mana yang sedang berjalan, karena hanya mengindikasikan, lemah, bahwa beberapa induk dari proses saat ini mungkin bash.
DigitalRoss

nah, nama program shell adalah sh (in / bin / sh). dan ya, echo $ SHELL akan mencetak variabel SHELL yang biasanya disetel.
knittl

Setiap sistem unix memiliki executable yang disebut /bin/sh, ya. Tapi saya tahu tidak ada shell yang namanya sh. Saya bisa memikirkan ash, ksh, csh, bash, zsh, dan tcsh. Yang pertama adalah biasa / bin / sh di linux dan NetBSD, yang terakhir adalah shell FreeBSD biasa, dan yang lainnya adalah shell opsional. Banyak lingkungan desktop mengubah shell login pengguna menjadi bash sambil membiarkan / bin / sh sebagai abu.
DigitalRoss

2
@ DigitalRoss shadalah shell Bourne. en.wikipedia.org/wiki/Bourne_shell Beberapa sistem (Solaris) masih dilengkapi dengan versi Bourne shell yang bukan hanya salinan dari salah satu implementasi ulang (abu, tanda hubung, bash, ksh, zsh).
Chris Johnsen

... dan bash dikenal sebagai "Bourne again shell", yang mewarisi beberapa fitur dari Bourne shell, csh dan ksh.
Balikkan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.