Построение простого сценария оболочки, который выполняет программу, переданную в качестве аргумента

#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 перед фактическим ее выполнением.