Sembunyikan direktori kerja saat ini di terminal

133

Sebagai default, terminal prompt menampilkan sesuatu seperti:

user@system:/folder1/folder2/folder3/folder4$

semakin dalam Anda masuk ke sistem file, semakin sedikit ruang yang tersisa untuk mengetikkan perintah. Dapatkah saya mengubah ini untuk hanya menampilkan sesuatu seperti:

>

Maksudku, aku bisa mengetik pwduntuk menunjukkan di mana aku berada. ;)

Theodor
sumber
1
Ini harusnya komentar tetapi saya tidak bisa berkomentar, maaf. Selain menyembunyikan direktori saat ini, nilai PS1 berikut secara visual akan memisahkan perintah bash Anda dengan baik:export PS1="\n___"
Hello World
bereksperimen dengan solusi Oli. Font warna berfungsi dengan baik di terminal: ekspor PS1 = '[\ 033 [0; 35m] \ h [\ 033 [0; 33m] \ w [\ 033 [00m]:'
linbianxiaocao

Jawaban:

153
export PS1='\u@\h: '

Itu menghasilkan oli@bert:prompt saya.

Jika Anda benar-benar menginginkan sesuatu yang minimalis seperti yang Anda minta, coba ini:

export PS1='> '

Anda dapat melampirkannya di akhir ~/.bashrcfile agar tetap ada di antara login.

Anda juga bisa berkreasi dengan beberapa warna. Inilah yang saya gunakan di server saya:

export PS1='\[\033[0;35m\]\h\[\033[0;33m\] \w\[\033[00m\]: '

Memberi (lebih mudah dilihat pada latar belakang hitam penuh):

Terminal saya

Glosari karakter yang dapat diterima di PS1

Oli
sumber
2
Anda juga dapat memiliki baris baru (\ n) sebagai bagian dari prompt, sehingga Anda bisa meletakkan semua info dan '>' di baris yang berbeda.
ak2
Saya pertama kali menemukan kustomisasi shell semacam ini "ekstrim" di msysGit, percaya atau tidak. Saya segera bertobat ke dunia bash. Memiliki semua info (direktori saya saat ini, cabang saat ini memeriksa dari repo Git, status indeks Git ...) di sana sangat mengagumkan. Saya berencana untuk melakukan sesuatu yang mirip dengan instalasi Ubuntu Saya baru-baru ini memakai laptop lama (bersama Windows XP).
dgw
3
apa format yang digunakan untuk mengatur warna?
Rakib
1
@SyedRakibAlHasan Coba echo -e "\e[31mHello World\e[0m"atau echo -e "\033[31mHello\e[0m World"di terminal, yang akan memberi Anda petunjuk. sumber
daka
103

Hanya untuk memperluas jawaban Oli (dan agar saya memiliki bookmark untuk simbol-simbol tulisan tangan pendek):

Bash prompt ( stefano@linux:~$) hanya yang pertama dari beberapa konfirmasi yang mungkin Anda lihat:

  • PS1 : prompt default yang Anda lihat ketika Anda membuka shell

    Nilainya disimpan dalam variabel lingkungan yang disebut PS1. Untuk melihat nilainya, ketik

    echo $PS1

    Ini akan memberi Anda sesuatu seperti

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

    Untuk mengubahnya, Anda dapat menetapkan nilai baru untuk variabel:

    export PS1="\u > "

    Ini akan menghasilkan prompt seperti ini:

    stefano > 
  • PS2 : adalah prompt kedua Anda. Ini ditampilkan ketika perintah belum selesai. Ketik echo "asddan tekan enter, prompt sekunder akan membiarkan Anda memasukkan lebih banyak baris sampai Anda menutup koma terbalik.

  • PS3 adalah prompt yang digunakan untuk select(2)

  • PS4 adalah prompt digunakan untuk teks alternatif jejak stack (default: +)

Untuk membuat perubahan permanen, Anda menambahkannya ke akhir .bash_profile(atau .bashrc, lihat pertanyaan ini ) di direktori home Anda.

Berikut adalah daftar singkat tentang singkatan yang dapat Anda gunakan saat menyusun ini:

  • \a     Karakter 'bel'
  • \A     24 jam
  • \d     Tanggal (mis. Sel 21 Des)
  • \e     Karakter 'melarikan diri'
  • \h     Nama host (hingga ".") Pertama
  • \H     Nama host
  • \j     Jumlah pekerjaan yang sedang berjalan (ps)
  • \l     Tty saat ini
  • \n     Umpan baris
  • \t     Waktu (jj: mm: dd)
  • \T     Waktu (jj: mm: dd, format 12j)
  • \r     Kereta kembali
  • \s     Shell (yaitu bash, zsh, ksh ..)
  • \u     Nama pengguna
  • \v     Versi bash
  • \V     String rilis Bash penuh
  • \w     Direktori kerja saat ini
  • \W     Bagian terakhir dari direktori kerja saat ini
  • \!     Indeks saat ini dalam sejarah
  • \#     Indeks perintah
  • \$     A "#" jika Anda root, "$"
  • \\     Backslash literal
  • \@     Waktu (format 12 jam dengan pagi / malam)

Anda tentu saja dapat memasukkan string literal apa pun, dan perintah apa pun:

export PS1="\u \$(pwd) > "

Di mana $(pwd)berdiri di "output dari" pwd.

  • Jika substitusi perintah lolos, seperti di \$(pwd), itu dievaluasi setiap kali prompt ditampilkan, jika tidak, seperti di $(pwd), itu hanya dievaluasi satu kali ketika bash dimulai.

Jika Anda ingin prompt Anda menampilkan warna, Anda dapat menggunakan kode warna bash untuk melakukannya. Kode ini terdiri dari tiga bagian:

40;33;01
  • Bagian pertama sebelum titik koma mewakili gaya teks.

    • 00 = tidak ada
    • 01 = berani
    • 04 = garis bawah
    • 05 = berkedip
    • 07 = terbalik
    • 08 = disembunyikan
  • Bagian kedua dan ketiga adalah warna dan warna latar:

    • 30 = hitam
    • 31 = merah
    • 32 = hijau
    • 33 = kuning
    • 34 = biru
    • 35 = magenta
    • 36 = cyan
    • 37 = putih

Setiap bagian dapat dihilangkan, dengan asumsi mulai dari sebelah kiri. yaitu "1" berarti tebal, "1; 31" berarti tebal dan merah. Dan Anda akan mendapatkan terminal Anda untuk mencetak dalam warna dengan lolos dari instruksi dengan \33[dan diakhiri dengan m. 33, atau 1B dalam heksadesimal, adalah tanda ASCII "ESCAPE" (karakter khusus dalam rangkaian karakter ASCII). Contoh:

"\33[1;31mHello World\33[m"

Mencetak "Hello World" dengan warna merah terang.

Stefano Palazzo
sumber
Saya ditambahkan export PS1='\[\033[1;31m\]\w\[\033[00m\] \$> 'ke /etc/bash.bashrctapi tidak ada yang tampak berubah ... ia bekerja pada per sesi, tapi i cant tampaknya membuatnya permanen.
Jared Tritsch
8

Alternatif lain adalah memperpendek jalur direktori kerja ketika terlalu lama: memotong direktori kerja command prompt terminal

Buat skrip python kecil yang mengimplementasikan logika pemangkasan yang diinginkan.

Contoh: ~ / short.pwd.py

import os
from commands import getoutput
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

Sekarang ujilah, dari terminal:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

Jika Anda setuju dengan hasilnya, tambahkan saja perintah ke ~ / .bashrc Anda

Olivier Lalonde
sumber
Exa ... ~ / short.pwd.py, ekspor ... ~ / .short.pwd.py Saya pikir keduanya harus sama. Entah Anda menempatkan perintah tambahan di kedua tempat atau Anda tidak melakukannya sama sekali. Tetapi ini adalah jawaban yang sangat bagus ..
MycrofD
7

Saya sering ingin melakukan ini sementara. Inilah yang saya lakukan:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

Saya harap ini membantu seseorang.

Joe Codeswell pengguna601770
sumber
1

untuk pengguna macOS:

open ~/.bash_profile

di akhir file tambahkan baris berikut dan simpan

export PS1='\u:\w\$ '

hasil di direktori home:

user: ~$

di sini u untuk pengguna w untuk direktori kerja saat ini $ adalah untuk menampilkan

Anda dapat mencoba gaya berikut:

export PS1='$ '

untuk memiliki $ sebagai prompt, tidak ada yang lain. seperti:

$ 
Sree
sumber
0

Hal yang membantu saya adalah: ekspor PS1 = '$'

Untuk mendapatkan ini setiap kali Anda membuka terminal, tulis perintah di akhir .bashrc yang dapat Anda buka dengan 'cd' diikuti oleh 'gedit .bashrc'.

Semoga ini membantu. Berhasil bagi saya.

Arka Mitra
sumber