Conversation
| __dir="$(cd "$(dirname "${BASH_SOURCE[${__b3bp_tmp_source_idx:-0}]}")" && pwd)" | ||
| __file="${__dir}/$(basename "${BASH_SOURCE[${__b3bp_tmp_source_idx:-0}]}")" | ||
| __base="$(basename "${__file}" .sh)" | ||
| __origin="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[${__b3bp_tmp_source_idx:-0}]}")")" && pwd)" |
There was a problem hiding this comment.
I think one problem with this is that readlink isn't ubiquitously available like this https://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac
There was a problem hiding this comment.
Thank you @kvz for pointing that out, and unwillingly throwing me into a rabbit hole with it 😉.
It seems with this restriction a one-liner solution cannot be achived. Could you imagine introducing a function like __readlink_f for this functionality?
I challenged myself to write an equivalent using cd, pwd -P and readlink, which should be available on all platforms. I got a lot right, but I'm struggling with relative symlinks. The function will not be very big, but ~100 lines it will be I guess.
There was a problem hiding this comment.
I have been down that rabbit hole before, and i think it is a case where we should admit defeat unfortunately 😔
There was a problem hiding this comment.
I made it out the 🐇🕳️ again. I'm not sure how deep I went, but I would love to here what you think, if you find the time: rdlink.md (rename it back to sh)
I ran a lot of tests but only debian based newer OSs and only bash 3.2.57 and bash 5.
There was a problem hiding this comment.
Very impressive! I'm happy to link to it in the README or even inline with the main template as a comment, but i don't think we can inline as much code with the template for this use case, i do apologize about that
There was a problem hiding this comment.
but i don't think we can inline as much code with the template for this use case, i do apologize about that
Please don't apologize. I totally get that.
What do you think about adding it to the src directory? Let me add a reference in the script to where it actually lives and I could make another PR. But I'm still a little hesitant because I don't really know if it performs under OSX or busybox.
There was a problem hiding this comment.
yeah we should first test it on osx and such. but if you don't mind, you could open the pr, we keep it pending for a bit while we spot issues on different systems, and then decide?
I propose another magic variable
__originwhich can be used for all dependencies. It would be the same as__direxcept when called via symlink.Context
I usually place bash scripts in
/opt/myscript/myscript.shand use aliases. But if they are of good use to other users I would like to create a symlink to/usr/local/bin/myscript. Here I noticed that__dirwould give me the directory of the symlink rather the one from the origin/opt/myscript. One may or may not have some dependencies at the origin which would not be found.I read some time about the usage of
realpathvsreadlink -f, where my conclusion for now is to stick with readlink.Example
cd /opt && git clone https://github.com/kvz/bash3boilerplate.gitLOG_LEVEL=7 /opt/bash3boilerplate/main.sh -f testpln -s /opt/bash3boilerplate/main.sh /opt/runLOG_LEVEL=7 /opt/run -f testpBefore the change
After the change
LOG_LEVEL=7 /opt/run -f testp