Saya ingin membuat C
program sederhana untuk berubah ke direktori proyek saya. Isinya sebagai berikut:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Saya mengkompilasinya dengan perintah berikut ( pro.c
adalah nama file-nya):
gcc pro.c -o /usr/local/bin/pro
Tidak ada kesalahan atau peringatan. Tetapi ketika saya menjalankannya, itu tidak mengubah direktori. Mengapa?
process
c
cd-command
enedil
sumber
sumber
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Itu ide!Jawaban:
Program Anda tidak persis apa yang Anda katakan untuk melakukan: ia mengubah direktori kerja untuk dirinya sendiri untuk
/home/enedil/projects/algo
. Tapi begitu keluar, direktori kerja shell dipulihkan.Saya kira apa yang ingin Anda capai adalah mengubah direktori kerja dari proses induk, yaitu shell, tanpa menggunakan cara yang sederhana
cd
. Ada metode , tetapi seperti yang dikatakan penulisnya: jangan lakukan itu.sumber
Direktori kerja saat ini bersifat lokal untuk proses. Jadi, apa yang Anda inginkan tidak mungkin.
sumber
Anda juga dapat menggunakan
CDPATH
variabel lingkungan. Sebagaimana dijelaskan dalamman bash
:Jadi, misalnya, Anda dapat menambahkan baris ini ke
~/.profile
:Anda sekarang dapat menjalankan
cd projects
dari direktori mana saja dan pindah ke~/projects
.sumber
Untuk melakukan ini untuk shell, gunakan
source
perintah (alias ke.
). Ini akan menjalankan aplikasi dalam konteks shell saat ini daripada membuat konteks shell baru. Ini adalah bagaimana Anda dapat mengatur variabel lingkungan juga. Jika Anda melihat semua skrip startup di/etc/rc.d
atau/etc/init.d
, Anda akan melihat banyak skrip yang disertakan oleh skrip lain dengan perintahThe
.
menyebabkan script/etc/init.d/rcvars
sehingga apa pun yang berubah tetap berlangsung dalam lingkungan saat ini.sumber