как распечатать содержимое HTTP-запроса в терминале, как «cat» делает для локальных файлов?

Связанные: https://stackoverflow.com/a/7804208/4937930

Это не ошибка, из которой невозможно выйти из сценария или вернуться из функции с помощью exit или return в подразделах. Они выполняются в другом процессе и не влияют на основной процесс.

Кроме того, я полагаю, что вы видите недокументированное поведение bash на (вероятно) undefined spec. в функции, никакие ошибки не утверждаются для return на верхнем уровне команд subshell и он просто ведет себя как exit .

IMHO это ошибка bash для несогласованного поведения return в зависимости от того, находится ли основной оператор в функции или нет.

#!/bin/bash

o() {
    # Runtime error, but no errors are asserted,
    # each $? is set to the return code.
    echo | return 10
    echo $?
    (return 11)
    echo $?

    # Valid, each $? is set to the exit code.
    echo | exit 12
    echo $?
    (exit 13)
    echo $?
}
o

# Runtime errors are asserted, each $? is set to 1.
echo | return 20
echo $?
(return 21)
echo $?

# Valid, each $? is set to the exit code.
echo | exit 22
echo $?
(exit 23)
echo $?

Output:

$ bash script.sh 
10
11
12
13
script.sh: line 20: return: can only `return' from a function or sourced script
1
script.sh: line 22: return: can only `return' from a function or sourced script
1
22
23

-121--26726-

Без бита execute нельзя запустить stat () для файлов в каталоге, что означает, что невозможно определить inode Чтобы удалить файл, необходимо знать информацию, которая будет возвращена stat () .

Демонстрация этого:

$ ls -ld test
drw------- 2 alienth alienth 4096 Sep 18 23:45 test

$ stat test/file
stat: cannot stat ‘test/file’: Permission denied

$ strace -e newfstatat rm test/file
newfstatat(AT_FDCWD, "test/file", 0x1a3f368, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "test/file", 0x7fff13d4f4f0, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied)
rm: cannot remove ‘test/file’: Permission denied
+++ exited with 1 +++

Вы также можете продемонстрировать это с помощью простого ls -l . Метаданные каталога могут быть доступны для чтения и записи пользователю, но без выполнения невозможно определить сведения о файле в каталоге.

$ ls -l test
ls: cannot access test/file: Permission denied
total 0
-????????? ? ? ? ?            ? file

-121--64631-

Я думаю, что вы получили ожидаемое поведение, в bash, каждая команда в конвейере выполняется в субкорпусе. Вы можете убедить себя, пытаясь изменить глобальную переменную вашей функции:

foo(){ x=42; : | x=3; echo "x==$x";}

Кстати, возврат работает, но он возвращается из субоболочки. Снова можно проверить, что:

foo(){ : | return 1; echo$?; echo "This should not be printed.";}

Выведет следующее:

1
This should not be printed.

Поэтому оператор return правильно вышел из подслова

.

0
23.02.2018, 21:30
2 ответа

Realiza la solicitud e imprime la respuesta a la consola:

curl https://serverfault.com

Realice la solicitud y guarde la respuesta en el archivo:

curl https://serverfault.com > output.txt
2
28.01.2020, 02:18

Parece que estás buscando curl. Para obtener más información, lea la página de manual. Para ejemplos:https://en.wikipedia.org/wiki/CURL#Examples_of_cURL_use_from_command_line

2
28.01.2020, 02:18

Теги

Похожие вопросы