Cara menemui, dari dalam skrip bash, jalan skrip ada
- 1903
- 262
- Wendell Shields
Apabila anda membangunkan skrip bash yang kompleks dan mula memasukkan pelbagai skrip ke dalam folder, di mana satu skrip berinteraksi dengan yang lain, sebagai contoh, memulakannya, dengan cepat menjadi perlu untuk memastikan kita mengetahui laluan skrip itu bermula, jadi kita dapat memulakan skrip lain dengan nama laluan yang berkelayakan sepenuhnya. Ini penting kerana skrip pertama mungkin bermula dari luar direktori skrip. Kita juga boleh melakukannya dengan menggunakan jalan relatif, jadi walaupun - entah bagaimana - membaca perintah yang memulakan skrip semasa tidak akan berfungsi.
Dalam tutorial ini, anda akan belajar:
- Apa yang
PWD
perintah adalah, dan apa yang dilakukannya - Bagaimana untuk menemui dari dalam skrip bash apa jalan yang skrip yang sama ada
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | Pengedaran linux-bebas |
Perisian | Baris perintah bash, sistem berasaskan linux |
Yang lain | Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat) |
Konvensyen | # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa |
Apa itu PWD?
The PWD
Perintah di Linux mengembalikan Direktori kerja jalan semasa dilaksanakan. Apa sahaja jalan yang kita buat sekarang, dan sebelum ini telah dilayari (atau telah dimasukkan ke dalam sistem operasi kita, seperti, sebagai contoh, apabila kita membuka arahan arahan/terminal), akan menjadi kembali apabila kita melaksanakan PWD
.
$ cd / $ pwd / $ cd / home $ pwd / home
Di sini, kami berubah menjadi direktori root (/
) dan dilaksanakan PWD
. Laluan semasa kami adalah direktori akar, jadi /
dikembalikan. Kami kemudian berubah ke /rumah
direktori dan dilaksanakan PWD
sekali lagi. Jalan yang dikembalikan sekarang /rumah
.
Di dalam skrip bash, PWD
Perintah akan berfungsi dengan cara yang sama. Perlu diperhatikan bahawa dari dalam skrip bash (dan pada baris arahan di luar skrip bash juga), kita boleh menggunakan pembolehubah sistem operasi khas $ Pwd
yang secara automatik akan dikemas kini oleh sistem operasi untuk mengandungi laluan semasa kami. Ini menyelamatkan kita daripada melakukan sesuatu seperti memanggil subshell, i.e. Mypath = "$ (pwd)"
tidak diperlukan, kita hanya boleh memanggil $ Pwd
pembolehubah.
Oleh itu, kita boleh menggunakan PWD, betul?
Tidak tepat. Gambar keadaan berikut:
$ sentuh 'mypath.sh '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.sh
Di sini kita menentukan skrip yang dinamakan mypath.sh
dan menjadikannya boleh dilaksanakan. Seterusnya, kami melompat satu direktori dari direktori rumah kami, dan melaksanakan skrip kami:
$ pwd /home /roel $ cd ... $ ./roel/mypath.SH /HOME
Sedangkan PWD
perintah di dalam kami mypath.sh
Skrip berfungsi dengan betul, ada masalah di sini: PWD
telah mengembalikan jalan yang kita ada sekarang, iaitu /rumah
sedangkan skrip sebenarnya disimpan di /rumah/roel
direktori!
Ingat tajuk artikel; Kami mencari jalan skrip disimpan di! Jadi bagaimana kita dapat mencari ini?
Cara!
Sedangkan tidak ada pemboleh ubah khas dalam bash untuk menutup jalan skrip disimpan, ada kaedah mudah untuk mendapatkannya.
$ cd - /home /roel $ touch 'mypath2.sh '$ echo'#!/bin/bash '>> mypath2.sh $ echo 'mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"' >> myPath2.sh $ echo 'echo "$ mypath"' >> myPath2.sh $ chmod +x mypath2.sh
Di sini kita menentukan skrip sekunder yang dinamakan mypath2.sh
. Di dalamnya kita meletakkan sedikit kod khas ($ (cd "$ (dirname \ $ 0)"; && pwd)
) yang akan menemui jalan skrip yang ada (dengan menukar ke dalam direktori itu, berdasarkan \ $ 0
pemboleh ubah (yang merupakan nama skrip dengan cara kami memanggilnya, i.e. Menggunakan jalan relatif yang berpotensi atau berkelayakan sepenuhnya) dan meminta nama dirname untuknya (dengan rujukan, dan perhatikan ia masih boleh menjadi jalan relatif jika skrip dimulakan menggunakan jalan relatif), dan kemudian berubah ke dalamnya (melalui CD
) dan seterusnya meminta PWD
(Direktori Kerja Laluan) untuk yang sama, memberi kita jalan yang berkelayakan sepenuhnya.
Mari kita lihat apakah ini berfungsi dengan lebih tepat daripada hanya menggunakan PWD
:
$ cd ... $ pwd /home $ ./rumah/mypath2.SH /HOME /ROEL
Skrip berfungsi dengan betul, dan walaupun mypath2.sh
agak dipanggil, dari luar direktori di mana skrip berada, output dikembalikan dengan betul mencerminkan maklumat yang dicari; jalan di mana skrip ada. Kami menyimpan perkara yang sama di $ Mypath
pemboleh ubah, dan pemboleh ubah ini kini boleh digunakan untuk contohnya $ Mypath/someotherscript.sh
di mana Someotherscript.sh
adalah skrip lain dalam direktori yang sama seperti mypath2.sh
Kesimpulan
Dalam artikel ini, kita mula -mula melihat PWD
Dan sama ada ia akan memenuhi masalah di tangan, mengetahui jalan skrip kami berada di setiap masa. Sedangkan PWD
mungkin berfungsi jika kita tidak mengubah direktori, ia tidak akan berfungsi dengan betul jika kita berada di luar jalan skrip. Kami kemudian memperkenalkan sekeping kod kecil (MyPath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"
yang akan selalu mengembalikan direktori skrip kami betul -betul.
Sekeping kod kecil, tetapi penyelesaian besar untuk isu pengekodan skrip bash kami! Nikmati
!
Tutorial Linux Berkaitan:
- Folder Zip di Linux
- Cara Memindahkan Folder di Linux
- Cara memeriksa penggunaan cakera dengan folder di linux
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang hendak dipasang di Ubuntu 20.04
- Cara membuat arkib yang disulitkan dengan tar dan gpg
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..
- Menguasai Gelung Skrip Bash
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
- « Apa itu DMESG di Linux, dan bagaimana saya menggunakannya?
- Mint 20 lebih baik daripada Ubuntu dan Microsoft Windows? »