Bisakah saya memodifikasi perintah terminal untuk melakukan hal-hal tambahan?

8

Saya sudah mencari alias, fungsi ... tapi saya belum menemukan sesuatu yang memuaskan. Biarkan saya memberi Anda beberapa skenario:

  • 95% dari waktu saya cdmasuk ke folder, saya tindak lanjuti dengan ls perintah.
  • 90% dari waktu saya mkdir, saya cdsendiri ke dalamnya.

Anda mendapatkan idenya.

Apa yang akan menjadi cara "terbersih" untuk mengikat perintah-perintah itu bersama-sama (atau fungsi lainnya)?

Carles Alcolea
sumber
5
Mengapa alias tidak bekerja untuk Anda?
Thorbjørn Ravn Andersen
2
Jadi haruskah hasil cd mkdir kemudian menempel pada ls?
bmike
@ Benike Yah, direktori yang baru dibuat akan kosong, jadi ls tidak mencetak apa pun.
Random832
@ Random832 Anda menganggap tidak ada flag pada ls, tetapi yang lebih penting pertanyaan saya akan mengungkapkan betapa rusak / beratnya perubahan yang diinginkan. Saya lebih suka alias daripada fungsi, tetapi keduanya dapat mencoba apa yang diminta.
bmike
1
@ fd0 Saya tidak meragukan bahwa alias tidak berfungsi. Saya bertanya mengapa. Mungkin ada solusi yang lebih sederhana untuk masalah ini.
Thorbjørn Ravn Andersen

Jawaban:

4

Anda dapat meletakkan garis-garis ini di .zsrhcatau.bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Hasil ->

masukkan deskripsi gambar di sini

Penjelasan dari jawaban ini :

Sebelumnya di .bashrc saya, saya memiliki: [-z "$ PS1"] && kembali, dan semuanya setelah baris itu hanya berlaku untuk sesi interaktif, jadi ini tidak mempengaruhi bagaimana cd berperilaku dalam skrip.

Info lebih lanjut dari komentar ini :

[-z "$ PS1"] memeriksa apakah $ PS (variabel prompt interaktif) adalah "nol panjang" (-z). Jika panjangnya nol, ini berarti belum ditetapkan, jadi Bash tidak boleh berjalan dalam mode interaktif. Bagian && kembali keluar dari sumber .bashrc pada titik ini, di bawah kondisi ini.

Btw, terima kasih untuk pertanyaannya, sangat keren :)

Edit:

Solusi lain adalah dengan mengintegrasikan ls Anda ke prompt Anda; Saya yakin Anda bisa melakukannya dengan OhMyZsh;)

StrawHara
sumber
1
Secara umum jangan menggunakan nama yang sama dengan perintah standar seperti cd ls rm dll karena Anda harus menggunakan perintah standar ini
user151019
@ Mark aku setuju untuk 'rm -rf ~ / *' ^^ Tapi untuk perintah cd, itu tidak terlalu berbahaya. Dan Carles ingin 'memutakhirkan perintah yang ada', jadi ...
StrawHara
Saya harus mengatakan bahwa saya telah menggunakan solusi ini sejak @StrawHara menerbitkannya dan saya memiliki 0 masalah. Saya ingin memberikan "bagaimana kelanjutannya" :) Dan itu sangat berguna; ini adalah bagaimana saya menggunakannya (.zshrc): i.imgur.com/WHpROIE.png
Carles Alcolea
13

Saya cenderung membuat perintah baru untuk ini. Saya pikir itu akan menjadi logis untuk menggabungkan mereka menjadi satu.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}
Random832
sumber
Saya suka ide Anda menggabungkan yang ini! :-)
Martin Allert
5
Jawaban ini juga paling bersih karena tidak mengganggu definisi default cd / mkdir bila digunakan oleh skrip
holroy
1
Tentu, tetapi bagaimana jika Anda memutuskan untuk mulai menggunakan bahasa pemrograman Go? : P
arxanas
@arxanas: Anda menggunakan makefiles? ;-)
DevSolar
2
hmmm saya suka yang ini. tetapi jika Anda secara tidak sengaja salah ketik nama, Anda membuat direktori baru. Apakah sulit untuk menerapkan cek pada cuti (cd /.... atau ../atau sesuatu) dan menghapus direktori jika itu kosong? Maksud saya jika Anda meninggalkan direktori hanya memeriksa apakah itu kosong dan jika demikian, hapus. jika Anda tidak menginginkannya, Anda masih dapat menggunakan cd alih-alih pergi
Schwertspize
6

Saya telah mencoba menambahkan hal-hal seperti ini ke .bashrc:

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

Namun, saya menemukan bahwa ini dapat mengacaukan skrip yang menggunakan perintah yang diganti, dan penanganan opsi bisa rapuh (misalnya, jika Anda ingin meneruskan -pke mkdirperintah di atas , itu juga diteruskan ke cd). Lebih baik mendefinisikan alias dengan nama yang berbeda (katakanlah, catau mcd).

arxana
sumber
1
menyisipkan [ -z "$PS1" ] && returndi akhir file, sebelum fungsi-fungsi itu, akan membantu
Carles Alcolea
5

Saya pikir fungsi adalah cara untuk pergi. Sesuatu seperti

chglist() {
    cd "$1" && ls
}

sebagai contoh.

fd0
sumber