I want to implement a userland command that will take one of its arguments (path) and change the directory to that dir. After the program completion I would like the shell to be in that directory. So I want to implement cd
command, but with external program.
Can it be done in a python script or I have to write bash wrapper?
Example:
tdi@bayes:/home/$>python cd.py tdi
tdi@bayes:/home/tdi$>
You can change directory or cd in Python using the os module. It takes as input the relative/absolute path of the directory you want to switch to.
Change the current working directory: os.chdir() Use the chdir() function in Python to change the current working directory. The path to the directory you wish to change to is the only parameter the method allows.
Change Current Working Directory ( cd ) To change directories, use the command cd followed by the name of the directory (e.g. cd downloads ). Then, you can print your current working directory again to check the new path.
chdir() method in Python used to change the current working directory to specified path.
Others have pointed out that you can't change the working directory of a parent from a child.
But there is a way you can achieve your goal -- if you cd from a shell function, it can change the working dir. Add this to your ~/.bashrc:
go() {
cd "$(python /path/to/cd.py "$1")"
}
Your script should print the path to the directory that you want to change to. For example, this could be your cd.py:
#!/usr/bin/python
import sys, os.path
if sys.argv[1] == 'tdi': print(os.path.expanduser('~/long/tedious/path/to/tdi'))
elif sys.argv[1] == 'xyz': print(os.path.expanduser('~/long/tedious/path/to/xyz'))
Then you can do:
tdi@bayes:/home/$> go tdi tdi@bayes:/home/tdi$> go tdi
That is not going to be possible.
Your script runs in a sub-shell spawned by the parent shell where the command was issued.
Any cd
ing done in the sub-shell does not affect the parent shell.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With