"В C / C ++ (тоже bash?) Первый аргумент командной строки, argv [0], является двоичным именем файла"
, кстати, совершенно неверно,Стандарт ISO не предписывает ничего подобного.
От C99:
Если значение argc больше нуля, строка, на которую указывает argv [0], представляет имя программы;argv [0] [0] должен быть нулевым символом, если имя программы недоступно из среды хоста.
И обратите внимание, что в нем говорится «представляет имя программы», а не «это местоположение»двоичного исполняемого файла ".Это потому, что есть более ранний фрагмент кода, в котором говорится:
... члены массива от argv [0] до argv [argc-1] включительно должны содержать указатели на строки, которым задаются значения, определенные реализациейсреда хоста до запуска программы. "
Для вашей команды argv[0]
вполне допустимо, чтобы команда" sleep 60 "была" фантастической утилитой сна pax ", а не" / bin / sleep ".
Короче говоря, среда не должна предоставлять представление программы, и, даже если это так, она не должна быть полезной для поиска двоичного файла.
Но, наскучив вам из-за моего диатриба, Perl предоставляет $0
или $PROGRAM_NAME
(в этом отвратительном "английском" режиме) для этой цели. Подробности см. perlvar .