Bagaimana menemukan, dari dalam skrip bash, jalan skripnya

Bagaimana menemukan, dari dalam skrip bash, jalan skripnya

Ketika Anda mengembangkan skrip bash yang kompleks dan mulai memasukkan berbagai skrip ke dalam folder, di mana satu skrip berinteraksi dengan yang lain dengan, misalnya, memulainya, dengan cepat menjadi perlu untuk memastikan kita tahu jalan dari skrip dimulai dari, sehingga kita dapat memulai skrip lain dengan nama path yang memenuhi syarat. Ini penting karena skrip pertama mungkin telah dimulai dari luar direktori skrip. Kami juga bisa melakukannya dengan menggunakan jalur relatif, jadi bahkan - entah bagaimana - membaca perintah yang memulai skrip saat ini tidak akan berfungsi.

Dalam tutorial ini, Anda akan belajar:

  • Apa itu PWD perintah adalah, dan apa adanya
  • Bagaimana menemukan dari dalam naskah bash jalur apa yang ada di dalam skrip yang sama
Bagaimana menemukan, dari dalam skrip bash, jalan skripnya

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Lainnya Utilitas apa pun yang tidak termasuk dalam shell bash secara default dapat diinstal menggunakan sudo apt-get install-name utilitas (atau instalasi yum untuk sistem berbasis redhat)
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Apa itu PWD?

Itu PWD Perintah di Linux mengembalikan Direktori kerja jalur Saat dieksekusi. Jalur apa pun yang saat ini kita temukan, dan sebelumnya telah menavigasi (atau telah ditempatkan oleh sistem operasi kita, seperti, misalnya, ketika kita membuka prompt/terminal perintah), akan menjadi apa yang dikembalikan ketika kita mengeksekusi PWD.

$ CD / $ PWD / $ CD / HOME $ PWD / HOME 


Di sini, kami berubah ke direktori root (/) dan dieksekusi PWD. Jalur kami saat ini adalah direktori root, jadi / dikembalikan. Kami kemudian berubah menjadi /rumah direktori dan dieksekusi PWD lagi. Jalan yang dikembalikan sekarang /rumah.

Di dalam naskah bash, PWD Perintah akan bekerja dengan cara yang sama. Juga penting untuk mengetahui bahwa dari dalam skrip bash (dan pada baris perintah di luar skrip bash juga), kita dapat menggunakan variabel sistem operasi khusus $ Pwd yang secara otomatis akan tetap terkini oleh sistem operasi untuk berisi jalur kami saat ini. Ini menyelamatkan kita dari keharusan melakukan sesuatu seperti memanggil subshell, saya.e. Mypath = "$ (pwd)" tidak diperlukan, kita bisa memohon $ Pwd variabel.

Jadi kita bisa menggunakan PWD, benar?

Tidak tepat. Bayangkan situasi berikut:

$ touch 'mypath.SH '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.SH 

Di sini kami mendefinisikan skrip bernama mypath.SH dan membuatnya dapat dieksekusi. Selanjutnya, kami melompat satu direktori dari direktori home kami, dan menjalankan skrip kami:

$ pwd /home /roel $ cd… $ ./roel/mypath.SH /HOME 

Sedangkan PWD Perintah di dalam kami mypath.SH Script berfungsi dengan benar, ada masalah di sini: PWD telah mengembalikan jalan yang kita temukan saat ini, yaitu /rumah sedangkan skrip sebenarnya disimpan di /home/roel direktori!

Ingat judul artikel; Kami mencari jalan yang disimpan skrip! Jadi bagaimana kita bisa menemukan ini?

Metode!

Sedangkan tidak ada variabel khusus dalam bash untuk menutupi jalur skrip disimpan, ada metode sederhana 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 kami mendefinisikan naskah sekunder bernama mypath2.SH. Di dalamnya kami menempatkan sedikit kode khusus ($ (cd "$ (dirname \ $ 0)"; && pwd)) yang akan menemukan jalur skrip ada di (dengan mengubah ke direktori itu, berdasarkan pada \ $ 0 variabel (yang merupakan nama skrip dengan cara kami menyebutnya, saya.e. Menggunakan jalur relatif atau memenuhi syarat sepenuhnya) dan meminta dirname untuk itu (dengan referensi, dan perhatikan itu masih bisa menjadi jalur relatif jika skrip mulai menggunakan jalur relatif), dan kemudian berubah ke dalamnya (melalui melalui CD) dan kemudian meminta PWD (Direktori Kerja Path) Untuk hal yang sama, memberi kami jalur yang sepenuhnya memenuhi syarat.

Mari kita lihat apakah ini berfungsi lebih benar daripada hanya menggunakan PWD:

$ CD ... $ PWD /HOME $ ./home/mypath2.sh /home /roel 

Skrip berfungsi dengan benar, dan meskipun mypath2.SH relatif dipanggil, dari luar direktori di mana skrip berada, output yang dikembalikan dengan benar mencerminkan informasi yang dicari; jalan di mana naskah ada. Kami menyimpan yang sama di $ Mypath variabel, dan variabel ini sekarang dapat digunakan untuk misalnya panggilan $ Mypath/someotherscript.SH Di mana someotherscript.SH adalah skrip lain di direktori yang sama mypath2.SH

Kesimpulan

Dalam artikel ini, pertama -tama kita lihat PWD Dan apakah itu akan memenuhi masalah yang dihadapi, mencari tahu jalannya, skrip kami berada, setiap saat. Sedangkan PWD Mungkin bekerja jika kita belum mengubah direktori, itu tidak akan bekerja dengan benar jika kita berada di luar jalur skrip itu. Kami kemudian memperkenalkan sepotong kecil kode (Mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)" yang akan selalu mengembalikan direktori skrip kami dengan benar.

Sepotong kode kecil, tetapi solusi besar untuk masalah pengkodean skrip bash kami! Menikmati!

Tutorial Linux Terkait:

  • Folder Zip di Linux
  • Cara memindahkan folder di linux
  • Cara Memeriksa Penggunaan Disk dengan Folder di Linux
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara membuat arsip terenkripsi terkompresi dengan tar dan gpg
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…
  • Menguasai loop skrip bash
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4