Как насчет awk
, потому что это не было упомянуто?
awk -F\| '$1~/\w/' file
-
является наиболее часто используемым для представления стандартного входа и <
является наиболее часто используемым для представления перенаправления из файла. Я полагаю, что те синтаксисы прибывают из ранних оболочек. Вместе, они подразумевают взятие в стандартном входе и отправку/перенаправление его в другом месте. Синтаксис является почти естественным.
Смотря на ВИХРЕВУЮ историю пересмотра, <
синтаксис был добавлен для ЗАВИХРЕНИЯ в середине 2000. Пересмотр, который добавил эту опцию, доступен как фиксация Мерзавца 5b7a5046e6
.
От журнала изменений,
Torsten Foertsch <torsten.foertsch at gmx.net> brought a set of fixes for
the rfc1867 form posts. He introduced 'name=<file' which brings a means to
suuply very large text chunks read from the given file name. It differs from
'name=@file' in the way that this latter thing is marked in the uploaded
contents as a file upload, while the first is just text (as in a input or
textarea field). Torsten also corrected a bug that would happen if you used
%s or similar in a -F file name.
Нет никакого упоминания о вдохновении или источника этой функции.
@-
синтаксис присутствовал в ЗАВИХРЕНИИ в самой ранней версии источника, который я мог найти. От первого пересмотра в конце 1999,
/* postfield data */
if('@' == *nextarg) {
/* the data begins with a '@' letter, it means that a file name
or - (stdin) follows */
FILE *file;
nextarg++; /* pass the @ */
Трудно определить, является ли это ОПРЕДЕЛЕННЫМ ДЛЯ ЗАВИХРЕНИЯ. Синтаксис является распространенным и естественным. ВИХРЕВОЙ функцией, с которой это связано, является основная функция ЗАВИХРЕНИЯ. Инструменты, подобные ЗАВИХРЕНИЮ, вероятно, реализуют некоторую форму если это.
Исходный вопрос, о котором задают
$ echo foo | curl -d 'sprunge=<-' http://sprunge.us
Здесь был мой ответ:
Я не полагаю, что это - функция ЗАВИХРЕНИЯ.
$ # Terminal A
$ curl --version
curl 7.31.0 (x86_64-unknown-linux-gnu) libcurl/7.31.0 OpenSSL/1.0.1e zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
$
$ echo foo | curl -d 'sprunge=<-' localhost:2222
$ # Terminal B
$ nc -l 2222
POST / HTTP/1.1
User-Agent: curl/7.31.0
Host: localhost:2222
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
sprunge=<-
Я не мог найти упоминание об этой функции в ВИХРЕВОЙ документации. Существует подобная функция все же.
Если Вы запускаете данные с буквы, остальные должны быть именем файла для чтения данных с, или - если Вы хотите, чтобы завихрение считало данные с stdin. Содержание файла должно уже быть закодировано URL. Несколько файлов могут также быть указаны. Регистрация данных из файла, названного 'foobar', таким образом была бы, покончили - данные @foobar.
Обновленный вопрос относительно этой команды:
$ cat file | curl -F 'sprunge=<-' http://sprunge.us
Делает несколько вещей. Используя socat
мы можем шпионить за запросом как так в одном терминале:
$ socat - TCP4-LISTEN:2222,fork | grep -E 'Content-Disp|msg'
Теперь во втором терминале мы будем использовать Ваш curl
управляйте для соединения с нашим socat
демон. Для cat file
мы собираемся использовать это в качестве нашего файла примера:
$ cat hello.txt
msg: hello curl
И когда мы curl
:
$ cat ~/hello.txt | curl -Fblah=\<- localhost:2222
Мы видим это в socat
вывод:
Content-Disposition: form-data; name="blah"
msg: hello curl
Если мы меняем струну от blah
к a -
мы будем видеть следующее:
$ cat ~/hello.txt | curl -F-=\<- localhost:2222
Результат:
Content-Disposition: form-data; name="-"
Таким образом, поскольку мы видим, аргумент после начальной буквы -F
название формы, против которой мы хотим отправить. Страница справочника для curl mentions that
- F' для представления формы HTTP, где мы хотим указать имя:
-F, --form <name=content>
(HTTP) This lets curl emulate a filled-in form in which a user
has pressed the submit button. This causes curl to POST data using
the Content-Type multipart/form-data according to RFC 2388.
This enables uploading of binary files etc. To force the 'content'
part to be a file, prefix the file name with an @ sign.
To just get the content part from a file, prefix the file
name with the symbol <. The difference between @ and < is then
that @ makes a file get attached in the post as a file upload,
while the < makes a text field and just get the contents for that
text field from a file.
Остальная часть переключателей к -F-=
переключатель подключает вход STDIN к этому аргументу. <-
. STDIN будет содержать поток содержания, прибывающего на пути cat file |
.
'-F-=<-'
по сравнению с. -F-=\<-
Эти 2 нотации идентичны. Снова мы можем использовать дополнительное многословие для наблюдения то, что происходит.
$ set -x; cat ~/hello.txt | curl '-F-=<-' localhost:2222; set +x
...
+ cat /Users/smingolelli/hello.txt
+ curl '-F-=<-' localhost:2222
Принимая во внимание, что другой метод:
$ set -x; cat ~/hello.txt | curl -F-=\<- localhost:2222; set +x
...
+ cat /Users/smingolelli/hello.txt
+ curl '-F-=<-' localhost:2222
Людям нравится использовать первый метод, потому что он сохраняет их дополнительный символ во вводе его. Но от curl
перспектива, они идентичны. Все это -F-=\<-
делает выходит из перенаправления так, чтобы curl
добирается для наблюдения его вместо оболочки, обрабатывающей его.
Исходный вопрос спрашивают об этом:
$ echo foo | curl -d 'sprunge=<-' http://sprunge.us
На который я ответил:
Когда Вы используете переключатель -d
для завихрения Вы подразумеваете POST, от curl
страница справочника.
-d/--data <data>
(HTTP) Sends the specified data in a POST request to the HTTP server,
in the same way that a browser does when a user has filled in an
HTML form and presses the submit button. This will cause curl to pass
the data to the server using the content-type
application/x-www-form-urlencoded. Compare to -F/--form.
test
но попробованный для изменения его для отражения вопроса. Я исправил свой ответ. – 22.07.2013, 07:31nc
протестировать это. Я всегда забываю о малоnc
. – slm♦ 22.07.2013, 07:33-d
. Я надеюсь, что Вы не возражаете, я не понял то, чем "sprunge = <-" был, пока я не видел Ваш ответ и понял, что это были данные, отправляемые в POST. – slm♦ 22.07.2013, 07:36