I just learnt a neat trick from Oracle Support.
How do you see the current value of NLS_LANG in SQLPLUS ?
HOST is not the right answer.
SQL> host echo $NLS_LANG AMERICAN_SWITZERLAND
SQL> HOST ECHO %NLS_LANG% %NLS_LANG%
The correct setting is revealed by
SQL> @.[$NLS_LANG] SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8ISO8859P1]"
SQL> @.[%NLS_LANG%] SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8ISO8859P1]"
It could well be that both return the same answer, but not necessarly, as shown above.
The unix discrepancy is related to the subshell created by
HOST. The subshell may read some .profile and overwrite the value of NLS_LANG
In Windows, the NLS_LANG setting may be set by sqlplus according to some registry entries