Cara menemui, dari dalam skrip bash, jalan skrip ada

Cara menemui, dari dalam skrip bash, jalan skrip ada

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
Cara menemui, dari dalam skrip bash, jalan skrip ada

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
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