Связанные: 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 правильно вышел из подслова
.
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
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