Решено: Передача параметров в "sh -c"

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Hoblin
Модератор
Сообщения: 1442
Статус: Etersoft team
ОС: ALT Linux

Решено: Передача параметров в "sh -c"

Сообщение Hoblin »

Есть задача - запускать скрипт одной командой, как бы формируя его на лету. Пример:

Код: Выделить всё

$ sh -c '#!/bin/sh
echo "Hello, world!"'

Так просто всё работает.

Следующий шаг: в скрипт нужно передавать параметр:

Код: Выделить всё

$ sh -c '#!/bin/sh
echo "Hello, $1!"'

Как в этом случае можно передать команде параметр $1?

P.S. Задача элементарно решается созданием временного файла:

Код: Выделить всё

$ echo '#!/bin/sh
echo "Hello, $1!"' > tmp.sh
$ sh tmp.sh world
$ rm -f tmp.sh

но этот способ неприемлем.
Спасибо сказали:
Hoblin
Модератор
Сообщения: 1442
Статус: Etersoft team
ОС: ALT Linux

Re: Решено: Передача параметров в "sh -c"

Сообщение Hoblin »

Да, как обычно, осознание мана приходит после того, как тема создана :(
-c string If the -c option is present, then commands are read from string. If there are arguments after the
string, they are assigned to the positional parameters, starting with $0.


Таким образом, я ошибался, указывая $1, когда стоило использовать $0

Код: Выделить всё

$ sh -c '#!/bin/sh
echo "Hello, $0!"' world
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Решено: Передача параметров в "sh -c"

Сообщение t.t »

Тут есть один подводный камень в случае, когда параметры не заданы:

Код: Выделить всё

$ sh -c 'echo $0' test
test
$ sh -c 'echo $0'
sh


Да, ещё: sha-bang не нужен в данном случае.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5281
ОС: Gentoo

Re: Решено: Передача параметров в "sh -c"

Сообщение /dev/random »

По-хорошему, это делают так:

$ sh -c 'echo "$1"' sh test
test

Всё-таки $0 должен быть именем команды. По-другому просто неприлично по отношению к тому, кто будет код скрипта читать. Да и на проблему, указанную t.t можно нарваться.
Спасибо сказали:
ekrasotkin
Сообщения: 1
ОС: CentOS

Re: Решено: Передача параметров в "sh -c"

Сообщение ekrasotkin »

Следует знать правило

-c string If the -c option is present, then commands are read from string. If there are arguments after the
string, they are assigned to the positional parameters, starting with $0.

И никаких ошибок не будет.

Автору темы спасибо. Мне пригодилось
Спасибо сказали:
Аватара пользователя
lone_wolf
Сообщения: 206

Re: Решено: Передача параметров в "sh -c"

Сообщение lone_wolf »

ekrasotkin писал(а):
19.05.2017 12:15
Следует знать правило

-c string If the -c option is present, then commands are read from string. If there are arguments after the
string, they are assigned to the positional parameters, starting with $0.

И никаких ошибок не будет.

Автору темы спасибо. Мне пригодилось

А можно тоже самое только по русски?
Спасибо сказали:
Ответить