[ https://issues.apache.org/jira/browse/OPENNLP-1568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17855446#comment-17855446 ]
ASF GitHub Bot commented on OPENNLP-1568: ----------------------------------------- kinow commented on code in PR #607: URL: https://github.com/apache/opennlp/pull/607#discussion_r1641987177 ########## opennlp-brat-annotator/src/main/bin/brat-annotation-service: ########## @@ -21,6 +21,28 @@ # may be inadvertantly placed in any output files if # output redirection is used. +# determine OPENNLP_HOME - $0 may be a symlink to OpenNLP's home +PRG="$0" + +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi +done Review Comment: Thank you @veita I asked as I read the code and from a quick read it seemed to have a regex that could lead to error in a certain scenario. You mentioned it's well-proven, but do you know if it was tested (e.g. with bats, or another unit test, covering several cases), or has it just been around for a long time and never raised any issues? It's late here, so my logic might be wrong, sorry. Here's what I tried. ```bash kinow@ranma:/tmp$ mkdir /tmp/opennlp-1568 kinow@ranma:/tmp$ cd /tmp/opennlp-1568 kinow@ranma:/tmp/opennlp-1568$ cat test.sh #!/bin/bash PRG="$0" while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG="`dirname "$PRG"`/$link" fi done echo "${PRG}" kinow@ranma:/tmp/opennlp-1568$ # not a symlink, all good... kinow@ranma:/tmp/opennlp-1568$ bash test.sh test.sh ``` Then if I create a symlink `/tmp/test/opennlp.sh`, it works, and the correct path is resolved, same as `realpath`. ```bash kinow@ranma:/tmp/opennlp-1568$ cd ../ kinow@ranma:/tmp$ mkdir test kinow@ranma:/tmp$ cd test kinow@ranma:/tmp/test$ ln -s /tmp/opennlp-1568/test.sh opennlp.sh kinow@ranma:/tmp/test$ bash opennlp.sh /tmp/opennlp-1568/test.sh ``` But if the file is not in `/tmp/opennlp-1568`, but rather in some folder like `/tmp/opennlp -> tests/`: ```bash kinow@ranma:/tmp$ mkdir '/tmp/opennlp -> tests/' kinow@ranma:/tmp$ cd '/tmp/opennlp -> tests/' kinow@ranma:/tmp/opennlp -> tests$ cp ../opennlp-1568/test.sh . kinow@ranma:/tmp/opennlp -> tests$ cd /tmp/test/ kinow@ranma:/tmp/test$ ln -s '/tmp/opennlp -> tests/test.sh' opennlp2.sh kinow@ranma:/tmp/test$ bash opennlp2.sh ./tests/test.sh ``` I believe it's due to the regex in the `expr` (but again, late here, came just to check the score of a soccer match and saw the GH notification. Here's the `-eux` below. ```bash kinow@ranma:/tmp/test$ bash -eux opennlp2.sh + PRG=opennlp2.sh + '[' -h opennlp2.sh ']' ++ ls -ld opennlp2.sh + ls='lrwxrwxrwx 1 kinow kinow 29 Jun 16 23:36 opennlp2.sh -> /tmp/opennlp -> tests/test.sh' ++ expr 'lrwxrwxrwx 1 kinow kinow 29 Jun 16 23:36 opennlp2.sh -> /tmp/opennlp -> tests/test.sh' : '.*-> \(.*\)$' + link=tests/test.sh + expr tests/test.sh : '/.*' ++ dirname opennlp2.sh + PRG=./tests/test.sh + '[' -h ./tests/test.sh ']' + echo ./tests/test.sh ./tests/test.sh ``` And `realpath`: ```bash kinow@ranma:/tmp/test$ realpath opennlp.sh /tmp/opennlp-1568/test.sh kinow@ranma:/tmp/test$ realpath opennlp2.sh /tmp/opennlp -> tests/test.sh ``` We do not need to use `realpath`. I was honestly just curious about this. We don't even need to fix the regex if you/others agree users are not likely to create paths with ` -> ` :+1: Other than that, changes looks OK to me (:soccer: :wave: ) > opennlp command fails when invoked from outside $OPENNLP_HOME/bin directory > --------------------------------------------------------------------------- > > Key: OPENNLP-1568 > URL: https://issues.apache.org/jira/browse/OPENNLP-1568 > Project: OpenNLP > Issue Type: Bug > Components: Command Line Interface > Affects Versions: 2.3.3 > Environment: Linux/Bash > Reporter: Alexander Veit > Priority: Major > > Try to run the opennlp command from outside $OPENNLP_HOME/bin directory. > It fails with an error message similar to > > {noformat} > 2024-06-15T22:44:04.900344345Z main ERROR Reconfiguration failed: > No configuration found for '4f2410ac' at 'null' in 'null'{noformat} > > The error is caused by the relative path in > {code:java} > -Dlog4j.configurationFile=../conf/log4j2.xml {code} > of the opennlp script. -- This message was sent by Atlassian Jira (v8.20.10#820010)