#c #linux #bash #shell
#c #linux #bash #оболочка
Вопрос:
Я создаю программу, которая помогает в отладке программ на C в памяти. Я вызываю
execlp("gnome-terminal","gnome-terminal","-e",command,(char*)0);
чтобы открыть новое окно терминала, в котором выполняется отлаживаемая программа. Я делаю это, чтобы моя отладочная информация не смешивалась с выводом пользовательской программы. Поскольку мне нужно настроить переменную среды перед запуском пользовательской программы, command var на самом деле является именем сценария оболочки, куда я передаю пользовательскую программу в качестве первого аргумента.
Вот мой сценарий:
#!/bin/bash
export LD_PRELOAD="./mylib.so"
$1
Это отлично работает для программ без аргументов, но что произойдет, если пользователь также предоставит аргументы в своей программе?
Например, я хочу вызвать свой скрипт следующим образом :
myScript.sh usersProgram arg1 arg2 etc
Как я могу правильно запустить пользовательскую программу внутри скрипта и передать ей все аргументы?
Спасибо
Ответ №1:
Используйте "$@"
, который будет правильно обрабатывать все аргументы.
Ответ №2:
Предполагая, что аргументы для программы всегда начинаются со 2-го аргумента, я бы предложил сделать это следующим образом:
#!/bin/bash
PROG=$1
shift
$PROG "$@"
Практически, просто указав «$ @» вместо трех строк выше, также будет работать. Но таким образом, вы можете легко выполнить некоторые манипуляции на основе $ PROG перед фактическим ее выполнением.