Ketika saya mengubah direktori kerja dalam skrip dan menjalankannya, direktori kerja hanya mengubah jalur yang ditentukan saat dalam skrip

0

Ketika saya mengubah direktori kerja dalam skrip dan menjalankannya, direktori kerja hanya mengubah jalur yang ditentukan saat dalam skrip. Ini skrip saya: (ini untuk memastikan apakah itu benar-benar mengubah direktori)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd

Ketika saya menjalankannya, ia mengembalikan jalur yang ditentukan, tetapi direktori kerja saya di terminal tidak berubah. Bagaimana cara mengubah direktori kerja di terminal saya melalui skrip?

Dash Conroy
sumber
1
Anda perlu sourceskrip. Lihat pertanyaan serupa ini .
aguslr

Jawaban:

4

Ini normal. Direktori "saat ini" atau "berfungsi" adalah parameter per-proses, dan suatu proses hanya dapat mengubah direktori kerjanya sendiri . Skrip mandiri dieksekusi sebagai proses shell terpisah dan tidak dapat memengaruhi shell induk (pada kenyataannya, induk mungkin tidak selalu berupa shell).

Anda perlu menggunakan fitur-fitur internal shell Anda, seperti:

  • fungsi shell:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
  • alias shell:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
  • "sumber" skrip alih-alih menjalankannya:

    . mycd.sh

Jika tujuan utama Anda adalah membuat pintasan ke direktori tertentu, Anda juga dapat menggunakan:

  • symlink di lokasi yang lebih nyaman:

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
  • variabel ($ mydir):

    mydir=/media/hard/drive
    cd $mydir
  • fitur $ CDPATH:

    CDPATH=".:/media/hard/drive"
    cd partitionX
grawity
sumber
Wow, terima kasih banyak! Ini sangat membantu! Terima kasih atas jawaban terinci dengan semua kemungkinan!
Dash Conroy