I have two directories in my home: `~/dir1` and `~/dir2` with a file in the first: `~/dir1/file.txt` Is there any way that I can make a symlink to it from `~/dir2` without moving to `~/` and if not why is that the case?

I've tried from `~/` running:

```
$ ln -s ./dir1/file.txt ./dir2/file.txt

```

but as I'd expect, that causes the resultant symlink to effectively point at `~/dir1/dir2/file.txt` which makes sense but isn't what I actually want.

I've also tried:

```
$ ln -s ./dir1/file.txt ../dir2/file.txt

```

Which returns:

```
ln: failed to create symbolic link `../dir2/file.txt': No such file or directory

```

I'd expect this to just create a symlink `~/dir2/file.txt` pointing to `~/../dir1/file.txt`

So I suppose my real question is this: can I force `ln` to make a symlink to a file that it doesn't think exists?

**Edit:**
For extra clarity as to what I'm trying to achieve, I want a single command that I can run from my home directory that will effectively do:

```
pushd dir2/ && ln -s ../dir1/file.txt && popd

```

or in Python (this is the closest I've come to what I want):

```
echo "import os; os.symlink('../dir1/file.txt', './dir2/file.txt')" | python

```