У меня есть две утилиты, написанные на Ruby. Цель первой утилиты нет ничего другого, но чтение файла из ссылки HTTP, и сбросить его содержимое в STDOUT, очень похожий на локон, позволяет называть его «mycurl»:Можно ли каким-либо образом передать параметр через трубу Linux bash?
mycurl http://example.com/file123.txt
Вторая утилита ничего не делает else, но загружает свой STDIN на FTP-сервер и записывает содержимое в файл с заданным именем, позволяет называть его «myput». Имя FTP-сервера и другие параметры жестко запрограммированы, поэтому нет необходимости в других параметрах, кроме имени файла на удаленном сервере. Две утилит работают вместе по конвейеру STDOUT первой команды (mycurl) к STDIN второй полезности (myput):
mycurl http://example.com/file123.txt | myput file123.txt
Это отдельные утилиты, потому что я часто использую их с другими командами вместе. Моя проблема заключается в том, что «mycurl» может определить имя файла из URL-адреса, но мне все равно придется передать эту опцию во вторую команду. Было бы удобнее, если первая команда может каким-то образом передать это имя файла, второй команды через трубу, или любым другим способом, и я мог бы написать только это:
mycurl http://example.com/file123.txt | myput
Как я могу добиться этого? Это вообще возможно?
Почему вы не сделать первую строку ввода в 'myput' быть имя файла? Или даже сделать это необязательным: например, если вы вызываете 'myput' (или даже' myput -'), тогда он будет читать имя файла из первой строки, иначе он ожидает аргумент. – paddy
Возможно, вы захотите обновить 'mycurl', чтобы принять имя программы в качестве аргумента, например' mycurl http://example.com/file123.txt -x myput'. Таким образом, 'mycurl' мог вызывать' myput' с 'file123.txt' в argv [1], а HTTP-ответ был отправлен в его stdin. – Eric