Aby uruchomić skrypt w systemie Linux bezpośrednio z terminala, należy poprzedzić nazwę pliku ./, czyli tak jak w odpowiedzi: ./nazwa.py. To jest związane z tym, jak system rozpoznaje lokalizację plików wykonywalnych. W Linuksie katalog bieżący (czyli ten, w którym aktualnie się znajdujesz) nie jest domyślnie przeszukiwany po prostu przez wpisanie nazwy pliku, więc samo 'nazwa.py' nie zadziała – system po prostu nie znajdzie takiego pliku w swoim PATH. Przedrostek ./ oznacza „ten katalog”, więc ./nazwa.py to po prostu: uruchom plik nazwa.py znajdujący się w katalogu, w którym teraz jestem. Musisz dodatkowo pamiętać o nadaniu plikowi uprawnień do wykonywania, czyli najczęściej trzeba wcześniej zrobić chmod +x nazwa.py. Moim zdaniem to super sprawa, bo dzięki temu łatwiej jest kontrolować, co tak naprawdę można uruchomić na danym systemie, a co nie. Z mojego doświadczenia wynika, że dużo osób zapomina o tej kropce i później się dziwi, że nie działa – standard Linuksa jest pod tym względem jasny i dość restrykcyjny, co chroni przed przypadkowym uruchomieniem niechcianych plików. Jeżeli w skrypcie nie masz shebanga (np. #!/usr/bin/env python3), to i tak możesz uruchomić go przez python3 nazwa.py, ale ./nazwa.py jest bardziej „linuxowe”, bo wtedy system sam rozpozna, jakiego interpretera użyć na podstawie shebanga. W praktyce, kiedy pracujesz z różnymi wersjami Pythona albo przenosisz swoje skrypty pomiędzy serwerami, takie podejście jest nie tylko wygodne, ale też zgodne z dobrymi praktykami administracyjnymi.
Wielu początkujących użytkowników systemów uniksowych zakłada, że do uruchomienia programu wystarczy wpisać po prostu jego nazwę, jak np. 'nazwa.py'. Jednak w systemach takich jak Linux, katalog bieżący (czyli „.”) nie jest automatycznie przeszukiwany w poszukiwaniu plików wykonywalnych – wynika to z zasad bezpieczeństwa, które uniemożliwiają przypadkowe uruchomienie nieznanych plików. Próba wpisania 'nazwa.py' bez żadnego przedrostka kończy się więc zwykle komunikatem o braku polecenia, ponieważ powłoka szuka tego pliku jedynie w katalogach wpisanych w zmiennej PATH. Z kolei zapis '.\nazwa.py' jest charakterystyczny raczej dla systemu Windows niż dla Linuksa – w Linuksie ukośnik odwrotny (backslash) nie pełni takiej roli jak w Windowsie i taka ścieżka nie zadziała. Często spotykam się z tym, że ludzie próbują przenosić nawyki z Windowsa do Linuksa i wpisują ścieżki w nieodpowiednim formacie, co prowadzi tylko do frustracji. W praktyce, jeżeli nie dodasz ./ przed nazwą pliku, shell nie będzie wiedział, że chodzi o plik w bieżącym katalogu. Dobrą praktyką jest też zawsze sprawdzić, czy plik ma uprawnienia do wykonywania (chmod +x), bo bez tego nawet poprawna ścieżka nie pomoże. Trzeba pamiętać, że Linux rozróżnia wielkość liter i jest bardzo konsekwentny w kwestii ścieżek – taki drobny błąd jak pomylenie ukośników czy zapomnienie o ./ potrafi skutecznie zablokować uruchomienie programu. Warto też od razu wyrobić sobie nawyk sprawdzania shebanga w skryptach, bo to on definiuje, czym powinien być uruchamiany dany plik. Jeżeli jednak uruchamiasz skrypt przez interpreter, np. python3 nazwa.py, to nie musisz dodawać ./ przed nazwą, bo wtedy interpreter sam sobie radzi z wyszukaniem pliku. Ale jeśli chcesz uruchamiać bezpośrednio, to tylko ./nazwa.py jest poprawne w Linuksie, zgodnie z tym jak działa shell i standardy systemów uniksowych.