Post History
I have this test setup: $ cat first #!./second one two three $ cat second #!/usr/bin/env python import sys for line in open(sys.argv[1]): print(line, end='') After chmod +x on th...
Question
symbolic-links
#1: Initial revision
Running an executable through a symlink, at the target's location
I have this test setup: ``` $ cat first #!./second one two three $ cat second #!/usr/bin/env python import sys for line in open(sys.argv[1]): print(line, end='') ``` After `chmod +x` on the files, I can successfully run `./first` from this directory and it displays its own source code. This confirms that a) relative paths work in shebangs and b) interpreters can be "chained" (i.e. the specified interpreter could itself be a script). However, if I now create a symlink somewhere else to `first`, I can't run the script via the symlink - it only works from within that directory. Whether the symlink itself uses an absolute or relative path doesn't seem to matter - either way I get `bash: ./third: ./second: bad interpreter: No such file or directory`. It appears that `first` runs with `third`'s CWD, such that the relative path in the shebang is interpreted relative to the symlink, rather than the original file. I understand that in general, moving the folder with `first` and `second` would break the symlink. But there are still useful things I think I could do here. 1. How can I make it such that I can re-link `third` after moving the folder, and still correctly find `second` via the link? Is it possible at all? 1. Suppose that there is a containing folder for all of `first`, `second` and `third`, and `third` uses a relative path to symlink to `first`. Presumably, if the entire containing folder were moved, all of the relative paths still make sense. How can I make `third` find `second` in this case? Is there no other way besides re-making `first` with the appropriate relative path in its own shebang?