Standard subshell vs command-substitution subshell

lftp имеет ~ / .lftprc

Вы можете разместить там псевдонимы, например

alias con-cme connect ftp://ftp.cmegroup.com/

И эта командная строка работает:

lftp -e "con-cme"

В противном случае вы могли бы написать несколько (красиво названных) сценариев, которые что ты хочешь. Либо простые сценарии оболочки ( #! / Bin / sh ), либо даже настоящие «сценарии lftp» ( #! / Usr / bin / lftp -f ).

Вот пример такого lftp-скрипта (вы можете представить его как исполняемый файл конфигурации;)

#!/usr/bin/lftp -f
set ftp:use-mdtm off
# ftp.cmegroup.com: 216.178.212.20, 208.39.78.6, ...
open 216.178.212.20
cat stc >/dev/null || exit 111
mirror --only-newer --delete --use-cache --verbose=3 \
    -X '20[0-9][0-9]/' \
    -X '.git' \
    -X '.metadata' \
    / /home/rudi/cme/ftp.cme.com
8
17.04.2016, 17:39
1 ответ

Интересно. Похоже, это специфичное для Bash поведение.

Я пробовал 3 других POSIX-совместимых оболочки (zsh, dash, busybox), и во всех из них echo "$ (trap)" дал тот же результат, что и (trap) : подоболочка запускается, и подоболочка не показывает ловушку EXIT .

(Обратите внимание, что trap -p специфичен для Bash, и без дополнительных параметров он делает то же самое, что и trap без параметров.)

Поведение Bash потенциально полезно : это означает, что вы можете написать a = "$ (trap)" для захвата настроек прерывания родительской оболочки, которые, скорее всего, будут интересны.

Однако, если вы установите или очистите ловушку в подоболочке, то она будет перечислить ловушки подоболочки вместо родительской:

$ trap 'echo bye' EXIT
$ echo "$(trap TERM; trap)"  # explicitly clear TERM, but leave EXIT alone
trap -- '' SIGTSTP
trap -- '' SIGTTIN
trap -- '' SIGTTOU

Таким образом, они также охватили редкий случай, когда вы интересуется ловушками подоболочки.

В общем, я заметил, что разработчики Bash, похоже, приложили дополнительные усилия, чтобы обработка подоболочки работала нормально. Кроме того, с помощью Bash намного проще управлять фоновыми подпроцессами, чем с помощью более минимальных оболочек POSIX.

2
27.01.2020, 20:13

Теги

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