Apakah mungkin mengubah direktori saat ini dari skrip?
Saya ingin membuat utilitas untuk navigasi direktori di Bash. Saya telah membuat skrip pengujian yang terlihat seperti berikut:
#!/bin/bash
cd /home/artemb
Ketika saya menjalankan skrip dari Bash shell direktori saat ini tidak berubah. Apakah mungkin untuk mengubah direktori shell saat ini dari skrip?
bash
environment
Artemb
sumber
sumber
pushd
(mungkin diarahkan>/dev/null
untuk menekan outputnya)cd
, Anda nanti dapat kembali ke direktori sebelumnyapopd
.Jawaban:
Anda perlu mengonversi skrip ke fungsi shell:
Alasannya adalah bahwa setiap proses memiliki direktori saat ini sendiri, dan ketika Anda menjalankan suatu program dari shell itu dijalankan dalam proses baru. Standar "cd", "pushd" dan "popd" dibangun pada interpreter shell sehingga memengaruhi proses shell.
Dengan membuat program Anda fungsi shell, Anda menambahkan perintah dalam proses Anda sendiri dan kemudian perubahan direktori tercermin dalam proses shell.
sumber
Saat Anda memulai skrip, proses baru dibuat yang hanya mewarisi lingkungan Anda. Ketika itu berakhir, itu berakhir. Lingkungan Anda saat ini tetap apa adanya.
Sebagai gantinya, Anda dapat memulai skrip Anda seperti ini:
The
.
akan mengevaluasi script dalam lingkungan saat ini, jadi mungkin akan diubahsumber
.sh
ekstensi benar-benar baru. Jangan gunakan itu.Mengingat jawaban yang tidak dapat dibaca dan rumit, saya yakin inilah yang harus dilakukan pemohon
PATH
. scriptname
The
.
(dot) akan memastikan script tidak dijalankan di shell anak.sumber
Menyatukan semua di atas, Anda dapat membuat alias
jika Anda tidak ingin menulis "." setiap kali Anda ingin sumber skrip Anda ke lingkungan shell, atau jika Anda tidak ingin mengingat itu harus dilakukan agar skrip bekerja dengan benar.
sumber
~/.bash_aliases
tidak selalu bersumber saat Bash diluncurkan.Jika Anda menggunakan bash, Anda dapat mencoba alias:
ke dalam file .bashrc tambahkan baris ini:
ketika Anda menulis "p" pada baris perintah, itu akan mengubah direktori.
sumber
Jika Anda menjalankan skrip bash maka skrip tersebut akan beroperasi pada lingkungannya saat ini atau pada anak-anaknya, tidak pernah pada induknya.
Jika tujuannya adalah untuk menjalankan perintah Anda: goto.sh / home / test Kemudian bekerja secara interaktif di / home / test salah satu cara adalah dengan menjalankan subshell interaktif bash dalam skrip Anda:
Dengan cara ini Anda akan berada di / home / test sampai Anda keluar (keluar atau Ctrl + C) dari shell ini.
sumber
Dengan pushd direktori saat ini didorong pada tumpukan direktori dan diubah ke direktori yang diberikan, popd mendapatkan direktori di atas tumpukan dan berubah kemudian ke itu.
sumber
Cukup buka
dan tambahkan kode ini di sebelah baris terakhir:
Kemudian keluar dari editor.
Kemudian ketik:
sekarang Anda dapat menggunakan: perintah Anda di terminal
sumber
Saya telah membuat skrip untuk mengubah direktori. lihat: https://github.com/ygpark/dj
sumber
Pada dasarnya kami gunakan
cd..
untuk kembali dari setiap direktori. Saya pikir untuk membuatnya lebih mudah dengan memberikan sejumlah direktori yang Anda butuhkan untuk kembali sekaligus. Anda dapat menerapkan ini menggunakan file skrip terpisah menggunakan perintah alias. Sebagai contoh:code.sh
Setelah menggunakan
source code.sh
shell saat ini, Anda dapat menggunakan:untuk kembali dua langkah dari direktori saat ini. Dijelaskan secara rinci di sini . Di sana juga dijelaskan bagaimana memasukkan kode ke ~ / .bashrc sehingga setiap shell yang baru dibuka akan secara otomatis mendapatkan perintah alias baru ini. Anda dapat menambahkan perintah baru untuk pergi ke direktori tertentu dengan memodifikasi kode dengan menambahkan
if conditions
argumen yang lebih banyak dan berbeda. Anda juga dapat menarik kode dari git ke sini .sumber
Pendekatan ini lebih mudah bagi saya.
Misalkan pada iMac pribadi di mana Anda adalah admin, di bawah direktori default ketika jendela perintah dibuka, / Pengguna / jdoe, ini akan menjadi direktori untuk pergi ke: / Pengguna / jdoe / Dekstop /Mongo/db.3.2.1 /tempat sampah.
Ini adalah langkah-langkah yang dapat menyelesaikan pekerjaan:
cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin
sebagai baris pertama.chmod 755 mongobin
source mongobin
pwd
Voila!
sumber
Saya juga membuat utilitas bernama goat yang dapat Anda gunakan untuk navigasi yang lebih mudah.
Anda dapat melihat kode sumber di GitHub .
Pada v2.3.1 yang gambaran penggunaan terlihat seperti ini:
sumber
Saya suka melakukan hal yang sama untuk proyek yang berbeda tanpa menyalakan shell baru.
Dalam kasus Anda:
Simpan skrip sebagai:
Kemudian jalankan dengan:
Kemudian Anda masuk ke direktori menggunakan shell yang sama.
sumber
Tambahkan baris cd di bawah ini di shellscript Anda ini:
sumber
Nyatakan jalur Anda:
sumber
Cukup tulis
PWD
dan ekspor di dalam skrip Anda, dan perubahan akan tetap ada.sumber