Как прочесть аргументы переданные в скрипт при помощи канала (bash)

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

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

Аватара пользователя
amorphius
Сообщения: 353
ОС: Ubuntu

Как прочесть аргументы переданные в скрипт при помощи канала

Сообщение amorphius »

Почему то всегда думал, что $1 - означает первый аргумент, без разницы как был вызван скрипт, то есть вот такой скрипт

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

#!/bin/bash
#script.sh
echo $1

вернет строку "asd" если прописать в консоли ./script.sh asd или так echo asd | script.sh
но мой взгляд на мир рухнул, когда узнал, что это не так:)
мне нужен скрипт, в который можно будет передавать параметры по каналу. Как их можно прочесть?
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Как прочесть аргументы переданные в скрипт при помощи канала

Сообщение sciko »

Скажу больше

home@home

$echo asd | echo

Потому что стандартный выходной поток команды, расположенной слева от символа |, направляется на стандартный ввод программы, расположенной справа от символа |. А что у нас стандартный ввод по умолчанию? Правильно. Клава.
С другой стороны, выводит первый аргумент скрипта.

Что же делать?
1. Можно превратить ввод в аргументы командой xargs

home@home

$echo asd | xargs echo asd

2. Использовать чтение с консоли
#!/bin/bash
#script.sh
read doit
echo $doit

home@home

$echo asd | sh script.sh asd


P.S. Перенесите в раздел про bash.
Спасибо сказали: