JSch User Commands Fail with "... not found" When Executed via Java
Problem:
Attempts to execute specific Unix commands through Java using the JSch library result in an "... not found" error, despite the commands functioning properly when run directly through an SSH client.
Possible Reasons:
-
Pseudo-terminal Allocation: The "exec" channel in JSch does not allocate a pseudo-terminal (PTY) by default, leading to a different environment setup and potentially missing shell scripts.
-
PATH Modification: The PATH environment variable might be set differently for interactive and non-interactive sessions, causing executables to become unavailable.
Solutions:
Recommended:
-
Full Path Command: Use the full path to the executable in the command, e.g., /bin/air sandbox run .
-
Startup Script Adjustment: Modify startup scripts to ensure consistent PATH settings for both interactive and non-interactive sessions.
Alternative Approaches:
-
Login Shell Invocation: Run the command explicitly via the login shell using the --login switch.
-
Environment Modification: Set the necessary environment variables within the command itself, e.g., PATH="$PATH;/path/to/air" && air sandbox run .
-
PTY Enablement (Not Recommended): While possible, forcing PTY allocation for the "exec" channel may introduce side effects.
Related Issues:
- [Certain Unix commands fail with "... not found", even with setPty enabled](https://stackoverflow.com/questions/34846613/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch-ev)
- [Command executed with SSH.NET SshClient.RunCommand fails with "No such file or directory"]https://stackoverflow.com/questions/19774736/command-4gl-executed-with-ssh-net-sshclient-runcommand-fails-with-no-such-file-o)
The above is the detailed content of Why do JSch User Commands Fail with 'Not Found' When Executed via Java?. For more information, please follow other related articles on the PHP Chinese website!