2017-02-16 1 views
0

Вот очень простой файл test.sh.Запуск нескольких команд, переданных как аргумент сценария bash

#!/usr/bin/env bash 

$1 

Когда я бегу ./test.sh "pwd; mkdir a;", он возвращает

./test.sh: line 3: pwd;: command not found 

Я пытался использовать '&'/'& &'/';', но все не работают. Как я могу запустить несколько команд по формуле?

+0

Попробуйте это Логическое ИЛИ Оператор (||) для запуска нескольких команд см. Https://www.howtogeek.com/269509/how-to-run-two-or-more-terminal-commands-at- once-in-linux/this – Abi

+0

./test.sh; PWD; mkdir a – Hussain

+0

Не могли бы вы объяснить, почему вам нужно передать последовательность команд в качестве аргумента скрипту? Хотя знание ответа на ваш вопрос может быть полезно для вас, вам может быть и что-то еще полезное: научиться избегать передачи команд сценарию в первую очередь, поскольку использование данных, переданных скрипту в качестве кода, часто не является оптимальным с точки зрения безопасности/предотвращения сюрпризов и ошибок. – Fred

ответ

2

Вы пытаетесь сделать bash интерпретировать строку ($1), как если бы это был скрипт или типизированные команды. Есть два способа сделать это:

  1. Используйте eval: eval $1 встроенных вместо $1.
  2. Пробег отдельно bash для оценки команд: bash -c "$1" вместо $1. Обратите внимание на цитаты.
+0

Thx! Тогда нет способа решить эту проблему, если я не могу отредактировать 'test.sh', правильно? – mayTree

+0

@mayTree вы можете создать временный скрипт с необходимым контентом, сделать его исполняемым, а затем передать его имя в качестве аргумента для 'test.sh' – yeputons

+0

Вы правы! Благодаря! – mayTree

 Смежные вопросы

  • Нет связанных вопросов^_^