Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

> 

Темы от студентов с запросами готовых решений по заданиям закрываются не глядя.

 
Reply to this topic Start new topic
> Решено: Передача параметров в "sh -c"
Hoblin
bookmark
gyfbbdvkffmrljmmmwd
Aug 9 2010, в 21:37
Сообщение #1


Etersoft team
Иконка группы

Сообщений: 1438

Вставить имя   :   Цитата

ОС: ALT Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Автор темы
Есть задача - запускать скрипт одной командой, как бы формируя его на лету. Пример:
Код
$ 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

но этот способ неприемлем.


--------------------
Go to the top of the page
 
+Quote Post
Hoblin
bookmark
gyfbbdvkffmrljmmmwd
Aug 9 2010, в 22:32
Сообщение #2


Etersoft team
Иконка группы

Сообщений: 1438

Вставить имя   :   Цитата

ОС: ALT Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Автор темы
Да, как обычно, осознание мана приходит после того, как тема создана :(
Цитата
-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


--------------------
Go to the top of the page
 
+Quote Post
t.t
bookmark
gyfbbdvkffmrljmmmwd
Aug 10 2010, в 09:58
Сообщение #3


думающий о вечном
Иконка группы

Сообщений: 7389

Вставить имя   :   Цитата

ОС: Debian, LMDE

Группа: Модераторы разделов

Тут есть один подводный камень в случае, когда параметры не заданы:
Код
$ sh -c 'echo $0' test
test
$ sh -c 'echo $0'
sh


Да, ещё: sha-bang не нужен в данном случае.


--------------------
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Go to the top of the page
 
+Quote Post
/dev/random
bookmark
gyfbbdvkffmrljmmmwd
Aug 10 2010, в 10:34
Сообщение #4



Иконка группы

Сообщений: 4335

Вставить имя   :   Цитата

ОС: Gentoo
Город: Волгоград

Группа: Админы

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

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

Всё-таки $0 должен быть именем команды. По-другому просто неприлично по отношению к тому, кто будет код скрипта читать. Да и на проблему, указанную t.t можно нарваться.
Go to the top of the page
 
+Quote Post
ekrasotkin
bookmark
gyfbbdvkffmrljmmmwd
May 19 2017, в 12:15
Сообщение #5


Прохожий
Иконка группы

Сообщений: 1

Вставить имя   :   Цитата

ОС: CentOS
Город: Балашиха

Группа: Участники

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

-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.

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

Автору темы спасибо. Мне пригодилось
Go to the top of the page
 
+Quote Post
lone_wolf
bookmark
gyfbbdvkffmrljmmmwd
May 20 2017, в 23:29
Сообщение #6


Новичок
Иконка группы

Сообщений: 21

Вставить имя   :   Цитата

Группа: Участники

Цитата(ekrasotkin @ May 19 2017, в 11: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.

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

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

А можно тоже самое только по русски?
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 24th August 2017 - в 11:43




Rating@Mail.ru