[ 
https://issues.apache.org/jira/browse/HADOOP-14976?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16220817#comment-16220817
 ] 

Allen Wittenauer commented on HADOOP-14976:
-------------------------------------------

Actually, there is an easy way out of this:  hard set HADOOP_SHELL_EXECNAME 
rather than calculate it dynamically.

Originally, HADOOP_SHELL_EXECNAME was meant to be 'smart' and was only used for 
hadoop_usage output.  When dynamic subcommands came along, it became obvious 
that the code would need some way to tell apart commands.  
HADOOP_SHELL_EXECNAME got re-purposed a bit but kept the dynamic nature to make 
it easy to copy-n-paste the header between the executables.

So we could just change the top to remove the calculation off of MYNAME, 
running the risk that someone who copies and pastes the code without 
understanding it may make some big mistakes.  [IMO, this risk is higher than 
one would think, given how often hadoop's shell code was previously propagated. 
 Those mistakes are still being repeated in new projects.]

> Allow overriding HADOOP_SHELL_EXECNAME
> --------------------------------------
>
>                 Key: HADOOP-14976
>                 URL: https://issues.apache.org/jira/browse/HADOOP-14976
>             Project: Hadoop Common
>          Issue Type: Improvement
>            Reporter: Arpit Agarwal
>
> Some Hadoop shell scripts infer their own name using this bit of shell magic:
> {code}
>  18     MYNAME="${BASH_SOURCE-$0}"
>  19     HADOOP_SHELL_EXECNAME="${MYNAME##*/}"
> {code}
> e.g. see the 
> [hdfs|https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/bin/hdfs#L18]
>  script.
> The inferred shell script name is later passed to _hadoop-functions.sh_ which 
> uses it to construct the names of some environment variables. E.g. when 
> invoking _hdfs datanode_, the options variable name is inferred as follows:
> {code}
> # HDFS + DATANODE + OPTS -> HDFS_DATANODE_OPTS
> {code}
> This works well if the calling script name is standard {{hdfs}} or {{yarn}}. 
> If a distribution renames the script to something like foo.bar, , then the 
> variable names will be inferred as {{FOO.BAR_DATANODE_OPTS}}. This is not a 
> valid bash variable name.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to