I am trying to write a Bash script to (amongst other things) run a particular Java programme stored in a .jar file.

The script is in a directory we will call foo. It includes this line

java -jar ~/Simutrans-Extended/simutrans-extended/Nightly-Updater-V2.jar -cl

When I run the script, the .jar file executes as though it were running in foo. But I need it to be executed in its actual location, in this case ~/Simutrans-Extended/simutrans-extended/. How do I do this please?

The script is running on Ubuntu 20.04, should that be relevant.

1 Answer 1


Use cd to change the directory in the line before the command. So the Bash script now reads:

cd ~/Simutrans-Extended/simutrans-extended/ && java -jar ./Nightly-Updater-V2.jar -cl
  • 3
    I suggest to use cd ... && java ... or cd ... || exit 1 to ensure that your java program is only called if no problem occurred when switching to destination directory.
    – Cyrus
    Jan 10, 2021 at 8:30
  • 1
    I am using Windows, and if I want to run a .jar file, the commands I use will almost exactly the same syntax as the above mentioned commands, just all slashes will be backslashes, the commands seem to be universal... Jan 10, 2021 at 13:47
  • @Cyrus Thank you, that is a really helpful tip! I have added it to the answer.
    – Matthew
    Jan 12, 2021 at 13:03
  • @XeнεiΞэnвϵς I am learning Linux from a Windows background too. While I agree they are conveniently similar, I believe there are two important differences. Windows does not accept ~ to refer to the user's home directory and the . is not necessary to refer to the present working directory. So it's best to keep this answer as Linux-only.
    – Matthew
    Jan 12, 2021 at 13:05
  • How did you managed to post the Q and the A at ~~.~~.37Z ? Surely answer own question? Nov 9, 2021 at 6:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.