Basis van Linux en de opdrachtregel
Een uitvoerbaar script run.sh in de huidige directory geeft „command not found” als het wordt gestart door „run.sh” te typen, maar wordt wel uitgevoerd als „./run.sh” wordt getypt. Wat is de reden?
- Arun.sh heeft geen uitvoerrecht, en alleen met ./ ervoor kan het zonder dat recht worden uitgevoerd
- BEen commandonaam zonder slash wordt alleen gezocht in de directory's uit de omgevingsvariabele PATH, die de huidige directory meestal niet bevat
- CDe #!/bin/bash op de eerste regel van run.sh (de shebang) wordt alleen gelezen als het met ./ ervoor wordt uitgevoerd
Antwoord en toelichting tonen
Antwoord: B. Een commandonaam zonder slash wordt alleen gezocht in de directory's uit de omgevingsvariabele PATH, die de huidige directory meestal niet bevat
Als de shell een commandonaam zonder slash krijgt, zoekt hij op volgorde in de directory's die, gescheiden door dubbele punten, in de omgevingsvariabele PATH staan (/usr/local/bin:/usr/bin enzovoort), en voert hij uit wat hij vindt. De huidige directory wordt meestal niet in PATH opgenomen, zodat niet per ongeluk een kwaadaardig programma met dezelfde naam wordt uitgevoerd dat ergens anders is neergezet. Een pad met een slash, zoals ./run.sh, voert dat bestand rechtstreeks uit zonder PATH te doorzoeken. De #!/bin/bash op de eerste regel (de shebang) geeft de interpreter op die het script uitvoert, op welke manier het ook wordt gestart.
Verder: nog 9 vragen over Basis van Linux en de opdrachtregel