Поскольку вы указали Linux, это можно сделать с помощью readlink -f /proc/$$/exe
. Это даст вам (на стандартном выходе )путь к оболочке, выполняющей ваш сценарий оболочки (что-то вроде/bin/bash
). Таким образом, вы можете назначить его переменной (по крайней мере в оболочке POSIX )с помощью var=$(readlink -f /proc/$$/exe)
.
$$
— pid текущей оболочки; /proc/«pid»/exe
— это функция ядра, которая позволяет вам запрашивать исполняемый файл, запущенный с заданным pid, в форме несколько «волшебной» символической ссылки. Таким образом, вы можете использовать readlink
, чтобы получить путь.
В системах, отличных от -Linux, вы должны иметь возможность использовать ps
, например, ps -o args= $$
, но это может привести к тому, что вместо этого вы получите имя сценария (POSIX допускает любое поведение ).
За исключением случаев, когда ваш сценарий предназначен для использования, например, для установки переменных в пользовательской оболочке, вам действительно следует использовать строку #!
вверху вместо того, чтобы указать, в какой оболочке его запускать.