Я создал небольшой интерпретатор команд (в C ++), который можно вызывать либо напрямую, либо в сценарии с помощью shebang (#!). Он может принимать аргументы в командной строке (в моем коде они обозначены как argc / argv).
Проблема в том, что при вызове через shebang сам скрипт передается в мою программу в качестве аргумента 1. Это проблематично; Я не хочу, чтобы мой командный интерпретатор пытался обработать сценарий, из которого он был вызван. Но я не вижу простого способа узнать, когда это так.
РЕДАКТИРОВАТЬ: Например, если у меня есть скрипт с именем «test», который начинается с #! / Usr / local / bin / miniscript, а затем вызывается как . / Test --help -c -foo , я получил 5 аргументов в своем C-коде: / usr / local / bin / miniscript, ./test, --help, -c и -foo. Если я вызываю его напрямую, я получаю четыре аргумента: / usr / local / bin / miniscript, --help, -c и -foo
Как я могу узнать, когда моя программа была вызвана с помощью shebang, или узнать, как пропустить аргумент, представляющий скрипт, которым она была вызвана?