Отдельный сценарий не должен проверять, в каком интерпретаторе он работает. Такой вид самоанализа неудобен и подвержен ошибкам, и, возможно, его придется реализовывать по-разному для разных Unices.
Например, сценарий Perl всегда можно с уверенностью предположить, что он интерпретируется интерпретатором Perl, сценарий Python всегда выполняется интерпретатором Python и так далее. Так почему бы сценарию bash
не предполагать, что он запускается bash
, а сценарию sh
— что он запускается /bin/sh
?
Тестирование конкретных возможностей текущего интерпретатора — это отдельная проблема, и, например. bash
предлагает $BASH_VERSION
и массив $BASH_VERSINFO
для проверки версии против (, например ).
Итак, как вы можете сделать, например,. сценарий bash
запускается с помощью bash
, а сценарий csh
запускается с помощью csh
? Ну, вы не позволяете пользователю выбирать переводчика.
Вы можете сделать это,
Отсутствие суффикса имени файла в файле скрипта,на случай, если это "запутает" пользователя. Сценарий bash
в файле myscript.sh
может заставить пользователя думать, что его можно запустить с помощью sh
. Вместо этого просто вызовите скрипт myscript
и...
Используйте строку#!
("shebang" или "hashbang" ).
Строка#!
-идет в самой первой строке скрипта (, два символа #!
должны быть первыми в файле )и указывают путь к используемому интерпретатору.
Сценарий bash
может иметь
#!/bin/bash
, если это путь к исполняемому файлу bash
в вашей системе, или если вы хотите, чтобы bash
загружался из любого места в $PATH
, где он находится в вашей системе,
#!/usr/bin/env bash
в качестве первой строки, например.
Это гарантирует, что он всегда будет интерпретироваться bash
, а не sh
, csh
, python
или каким-либо другим интерпретатором несвязанного языка.
Следующим шагом будет
chmod +x myscript
. Теперь вы можете запустить свой скрипт с помощью
./myscript
не беспокоясь о том, какой интерпретатор использовать для его выполнения. На самом деле, для пользователя сценария совершенно не имеет значения , был ли это сценарий bash
, сценарий Python или скомпилированный двоичный файл.
Конечно, это, вероятно, не нормальное поведение, но вы не даете достаточно информации, чтобы понять, что происходит.
Если происходит сбой tmux и вы не можете снова подключиться к тому же сеансу, вам следует убедиться, что это все еще происходит с последней версией tmux, и если это так, откройте отчет об ошибке.