I'm writing a simple script to change the present working directory to some other directory. The following script works okay until the program terminates, after which I'm back to my home directory.
#!/usr/bin/python
import os
if __name__ == '__main__':
os.chdir("/home/name/projects/python")
os.system("pwd")
print 'dir changed'
Output is:
bash:~$ python chdir.py
/home/name/projects/python
dir changed
bash:~$ pwd
/home/name
I want the directory change to remain even after the program has exited. Any ideas how to do it?
Edit:
What I really want to do is this: I use this directory frequently and instead of doing cd <path>
every time I open the terminal, I just write ./progname
and it changes the directory.
If you want the directory change to remain even after the program has exited.
You can end the python script with os.system("/bin/bash")
, this will leave you in bash shell inside the new directory.
#!/usr/bin/python
import os
if __name__ == '__main__':
os.chdir("/home/name/projects/python")
os.system("pwd")
os.system("/bin/bash")
For the need raised in your comment "I use this directory frequently and instead of doind cd <path>
every time I open the terminal, I just write ./progname
and it changes the directory"
I would suggest using bash alias which will change directory:
bash:~$ alias mycd='cd /home/name/projects/python'
and use this alias in bash shell in order to change the directory:
bash:~$ mycd
You can add this alias to your .bashrc
- which will allow you to use this alias every time.
import os
os.system('cd /home/name/projects/python')
It doesn't work because, when you run the script, it creates a new environment. When you cd
in this new environment it works but it go back to the old environment as soon as the program exits.
If you were using a bash script, you could run source program.sh
to run program.sh
on the same "environment" so when the program finishes it stays on the same directory.
The other alternative someone posted, executing /bin/bash
after cd
, seems to work as it is actually creating a new bash process from inside your Python program. This means that your program is still running and it may not be appropriate for some applications.
Note that if your objective is simply create a shortcut to change directory in the terminal. You may be better using bash alias instead.
This answer is exactly the same as the accepted in that it solves the problem, which adds no value, but goes about it a little differently. I think this answer maybe adds value in explanation and alternate implementation. You can decide.
Okay, sorry for yelling.
You should just edit your .bash_profile
file. It's really simple. Touch creates the file, and then open functionally opens it. In your terminal:
touch ~/.bash_profile; open ~/.bash_profile
This opens Text Edit. Create your shortcut like this, I put it at the end of my file:
alias cdd="cd ~/frequent/my-directory"
Then run this to update your .bash_profile
file. (Or close and reopen the terminal, whatever you like.)
source ~/.bash_profile
Now, you just run your aforementioned shortcut:
Macbook-Spen:~ spen$ cdd
And this switches your directory, with many less key strokes!
Macbook-Spen:my-directory spen$
Sources: