Jeśli chcę, aby moje skrypty korzystały z powłoki bash, to czy użycie rozszerzenia .bash faktycznie wywołuje bash, czy też zależy to od systemu config / 1st shebang. Gdyby oba były skuteczne, ale różne, co miałoby pierwszeństwo?
Nie jestem pewien, czy zakończyć moje skrypty za pomocą .sh, aby po prostu wskazać „skrypt powłoki”, a następnie pozwolić, aby pierwszy wiersz wybrał powłokę bash (np. #!/usr/bin/env bash
), Czy też po prostu zakończyć je za pomocą .bash (a także ustawienia linii 1 ). Chcę wywołać bash.
.bash
rozszerzenie. Ponadto zasadą Debiana jest posiadanie skryptów w pakietach, które lądują w jednym zbin
folderów, aby nie mieć rozszerzeń.Odpowiedzi:
Jeśli nie używasz interpretera jawnie, to wywoływany interpreter jest określany przez
shebang
użycie w skrypcie. Jeśli korzystasz z interpretera, to tłumacz nie dba o to, jakie rozszerzenie dajesz skryptowi. Jednak rozszerzenie istnieje, aby dla innych było bardzo oczywiste, jaki to rodzaj skryptu.Zobacz,
.py
rozszerzenie do skryptu bash nie czyni go skryptem Pythona.To zawsze
bash
skrypt.źródło
Nazywanie skryptu nie ma nic wspólnego z jego uruchomieniem.
Linia shebang określa, jakiego interpretera używa się do uruchomienia skryptu.
Osobiście nie dbam o to, czy skrypt to sh, bash, perl, cokolwiek, więc po prostu nazywam go tym, co robi; Uważam, że dodanie rozszerzenia jest zbędne. Zrobię,
file scriptname
aby dowiedzieć się, co to jest plik, jeśli chcę to wiedzieć.Jeśli więc chcesz, aby skrypt był uruchamiany
bash
, użyj#!/bin/bash
jako pierwszego wiersza.źródło
.sh
rozszerzenia stylu oznacza, że nie trzeba zmieniać jego nazwy. (Trzeba przyznać, że nic nie stoi na przeszkodzie, aby program C produkujący plik binarny z.sh
rozszerzeniem byłby mylący.)#!/usr/bin/env bash
dla przenośności, omówione tutaj stackoverflow.com/a/10383546/54964