Fish-shell: рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЬреБрд▓ре░ 2012  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: fish-shell/fish-shell

рдкрд░реАрдХреНрд╖рд╛:

function testfun
    set input (cat)
    echo $input
end

echo testing123 | testfun

рдпрд╣ "test123" рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

function testfun
{
    input="$(cat)"
    echo $input
}

echo testing123 | testfun

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рд╕рдорд╕реНрдпрд╛, grep рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ grep рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддреА рд╣реИ - рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ grep рдЙрдкрдирд╛рдо рдХреЛ рд╕рдВрднрд╡рддрдГ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо, рд╢рд╛рдпрдж?) рдХрдо рд╕реЗ рдХрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

cat рдХрд╛ рдЙрдкрдпреЛрдЧ @milieu рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдордЫрд▓реА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, 2.3.1 рдкрд░ (рдЬрд┐рд╕рдХрд╛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлреЗрдбреЛрд░рд╛ 25 рдХреЗ рд▓рд┐рдП рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк 'рд░реАрдб' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

function t
    while read -l line
        echo $line
    end
end

рдореИрдВ рдмрд╕ рд╕рдордЭ рдЧрдпрд╛ рдерд╛, рдХрд┐ рдордЫрд▓реА рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯрдб рдХреЛ 'рдмрд┐рд▓реНрд▓реА' рдХреЗ рдмрдЬрд╛рдп 'рд╕реЗрдЯ' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП "рд╕реЗрдЯ" рд╕реЗ рдЕрдзрд┐рдХ рдЧрд╣рд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЯрд░реНрдорд┐рдирд▓ I / O рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ - рдпрд╣ рдЗрдирдкреБрдЯ рдХреЛ рдмрдлрд╝рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

~> function meh
       cat
   end
~> # First, the way it's supposed to work.
~> # As input, we press the keys: a RET b RET control-D
~> cat
a
a
b
b
~> cat | cat
a
a
b
b
~> # Now...
~> meh
a
a
b
b
~> # So far so good, but...
~> cat | meh
a
b
^D
... um...
^D
control-D repeatedly does not work
try control-C
Job 1, тАЬcat | mehтАЭ has stopped
~> fg
Send job 1, тАЬcat | mehтАЭ to foreground
cat: stdin: Interrupted system call
~> jobs
jobs: There are no jobs
~> # Dear lord.
~> # For completeness...
~> meh | cat
a
b
aD
b
~> 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, cat | meh | cat рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ cat | begin; cat; end ред
рдореИрдВ рдЖрдкрдХреЛ рдЖрдЧреЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ "рдмрд┐рд▓реНрд▓реА" рдЬреЛ cat | meh рдореЗрдВ рдПрдХ рдмрд╛рдзрд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреА рд╣реИ "рдмрд┐рд▓реНрд▓реА" рд╣реИред рдЕрд░реНрдерд╛рддреН:

~> cp /bin/cat mycat
~> ./mycat | meh
Job 1, тАЬ./mycat | mehтАЭ has stopped  #after control-C
~> fg
Send job 1, тАЬ./mycat | mehтАЭ to foreground
mycat: stdin: Interrupted system call

рддреЛ рд╡рд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдордЫрд▓реА рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдХреИрд╕реЗ рдпрд╣ рдЙрдирдореЗрдВ рдкрд╛рдЗрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ?

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрд▓ рд░рд╣рд╛ рд╣реИ
pbpaste | begin; cat; end
рддрд╛рдЬреЗ рдордЫрд▓реА рдХреЗ рдЦреЛрд▓ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░, рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде "23 \ n" рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдХрднреА-рдХрднреА рдмрд╕ 23 рдмреИрдХ рдЖрдЙрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛, рдФрд░ рдХрднреА-рдХрднреА рд╢реЗрд▓ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг-рд╕реА рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдУрд╣ рдпрд╛рд░ред

рдЗрд╕ рдмреАрдЪ, рдпрд╣ рд╕рдВрдХреЗрдд рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ SIGTTIN ./mycat | begin; cat; end рдореЗрдВ "mycat" рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:

     21    SIGTTIN      stop process         background read attempted from
                                             control terminal

рдЬреАрдПрдирдпреВ рдкрд░рд┐рд╡рд╛рдж рдирд┐рдпрдорд╛рд╡рд▓реА рдХреЗ рдЕрдиреБрд╕рд╛рд░: "рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреА рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдиреМрдХрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИред рдЬрдм рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдиреМрдХрд░реА рдореЗрдВ рдХреЛрдИ рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ, рддреЛ рдиреМрдХрд░реА рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред рдПрдХ рд╕рдВрдХреЗрдд рд╕рдВрдХреЗрдд рд╣реИред "

рддреЛ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдорд╛рдЗрдХрд╛рдЯ" рдпрд╛ рддреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдлрд┐рд░ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдордЫрд▓реА рдХреЗ рдХрд╛рд░реНрдп-рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд╛рдЗрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдЬреНрдЮрд╛рди рдорджрдж рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдПрдХ рдкрд╛рдЗрдк рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ... рд▓реЗрдХрд┐рди fg рдХрдорд╛рдВрдб рджреЗрдиреЗ рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЦреАрдВрдЪрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХреЗред

~ $ alias pjson='python -m json.tool | pygmentize -l json'
~ $ curl -u smoku -X GET -H "Content-Type: application/json" 'https://jira.......' | pjson
Job 4, 'curl -u smoku -X GETтАж' has stopped
~ $ fg
Enter host password for user 'smoku': ********
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   593    0   593    0     0   1372      0 --:--:-- --:--:-- --:--:--  1375
~ $ fg
{
    "expand": "renderedFields,names,schema,transitions,operations,editmeta,changelog",
    "id": "29874"
}

рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдирд╛рдо рдХреЗ рдмрдЬрд╛рдп $PATH рдореЗрдВ pjson рд░реИрдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... :(

рдореЗрд░реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдпрд╣ рднреА рдЦреБрд▓рд╛ рд╣реИ рдмрдЧ рдмрдЧ https://bugzilla.opensuse.org/show_bug.cgi?id=963548

рд╡рд╛рд╣! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдореЗрд░рд╛ рдХрд╛рдо рдорд┐рд▓ рдЧрдпрд╛! # 110 рдлрд┐рд╢ рдкрд╛рдЗрдкрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реБрдП

function line --argument-names n
    cat 1>| tail -n +$n | head -1
end

рдпрд╣ рд╕рдорд╕реНрдпрд╛, grep рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ grep рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддреА рд╣реИ - рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ grep рдЙрдкрдирд╛рдо рдХреЛ рд╕рдВрднрд╡рддрдГ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо, рд╢рд╛рдпрдж?) рдХрдо рд╕реЗ рдХрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

cat рдХрд╛ рдЙрдкрдпреЛрдЧ @milieu рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдордЫрд▓реА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, 2.3.1 рдкрд░ (рдЬрд┐рд╕рдХрд╛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлреЗрдбреЛрд░рд╛ 25 рдХреЗ рд▓рд┐рдП рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЗрд▓ рдХреЗ рднреАрддрд░ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдЕрдВрддрд░ рд╣реИ:

(zsh)$ ./fish -c "read n | grep nothing"    
read> lol
(zsh)$ ./fish
(fish)$ read n | grep nothing
read> 
# Stuck forever, needs to kill the terminal. ^C, ^Z have no impact.

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@layus : рдирд╣реАрдВ, рд╡рд╣ # 3805 рд╣реИ, рдПрдХ рдРрд╕рд╛ рдореБрджреНрджрд╛ рдЬрд╣рд╛рдВ рдордЫрд▓реА рд╕реНрд╡рдпрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

_ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдП рд╣реИрдВ, рдиреАрдЪреЗ рдордЫрд▓реА рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реИ / 3.0_

рд╡рд╣рд╛рдБ рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдореБрджреНрджреЛрдВ рдордЫрд▓реА рдЧрд▓рдд рдпрд╣рд╛рдБ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдмрдлрд░рд┐рдВрдЧ рд╣реИ рд╕рдорд╛рд░реЛрд╣ / рдмреНрд▓реЙрдХ рдЙрддреНрдкрд╛рджрди (рдореИрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдПрдХ рдЖрдзреБрдирд┐рдХ рдЦреЛрд▓ рдХреБрдЫ рднреА рдХрд╣реАрдВ рднреА рдмрдлрд╝рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реВрдБ) рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрдирдкреБрдЯ / рдПрдХ рдмреНрд▓реЙрдХ рднрд░ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд░рд╣рд╛ рд╣реИред рдХреБрдЫ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд░рд╛рдп рдХреЗ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рдХрдорд░рд╛) рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдордЫрд▓реА рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рд╣реЛрддреЗ рд╣реИрдВ (рдФрд░ рдмрд┐рд▓реНрдбрд┐рдВрд╕ рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ, рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ) рдЬреЛ рдЖрд╕рд╛рди рд╣реИрдВ: рдПрдХ рдЗрдирдкреБрдЯ, рджреЛ рдЖрдЙрдЯрдкреБрдЯ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмрд╛рдж рдХреЗ рдХрдорд╛рдВрдб рдореЗрдВ рдЬрдВрдЬреАрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЯреНрдЯреАред рдЬрдм рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЗрдирдкреБрдЯ (рдЬреИрд╕рд╛ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╕реЗ рд▓реЗрдХрд░ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдпрд╛ рдмрд┐рд▓реНрдбрд┐рдВрд╕ рддрдХ (рдЬреЛ рдЕрдВрддрддрдГ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ) рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдмреНрд▓реЙрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд╣реИред (cat) рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЙрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рдкрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рднреАрддрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

mqudsi<strong i="11">@ZBook</strong> /m/c/U/m/Documents> type testfun
testfun is a function with definition
function testfun
    set input (cat)
    printf "You said '%s'\n" $input
end
mqudsi<strong i="12">@ZBook</strong> ~/r/fish-shell> echo testing123 | testfun
hello
^D
You said 'hello'

рдЖрдк рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕реЗрдЯ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрдирдкреБрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрд▓реА /dev/tty рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рдЬреЛ рддрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд░реЗрдкреЛ рдХреЗ рдЦрд┐рд▓рд╛рдл рджрд╛рдпрд░ рдХрд┐рдП рдЧрдП / рдереЗ (рдХрдИ) рдХреАрдбрд╝реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ "рдЙрдкрдкреНрд░рдХрд╛рд░" рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рдереЗред IMHO, рдпрд╣ рдмреИрд╢ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдмреИрд╢ рдЕрд╕рд▓реА рдЙрдкрдзрд╛рд░рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдХреЗрд╡рд▓ рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдореИрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рд╕реЗ рдЙрдкрдЬрд╛рдК рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛ рдЬрд╣рд╛рдБ рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди / рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдкреБрдЯ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:

mqudsi<strong i="19">@ZBook</strong> /m/c/U/m/r/fish-shell> printf 'foo\nbar\n' | begin
                                        head -n1 | read -l line1
                                        head -n2 | read -l line2
                                        echo line1: $line1
                                        echo line2: $line2
                                    end
line1: foo
line2:

рдЯреАрдмреАрдПрдЪ рдореИрдВ рдмрд╣реБрдд рд╣реИрд░рд╛рди рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

mqudsi<strong i="23">@ZBook</strong> /m/c/U/m/r/fish-shell> printf 'foo\nbar\n' | begin
                                        /bin/echo 'hi from echo'
                                        cat | read -z from_cat
                                        printf 'from_cat: "%s"' $from_cat
                                    end
hi from echo
from_cat: "foo
bar
"┬╢  

рдФрд░ рдпрд╣ рд╕рд╣реА рднреА рд╣реИ:

mqudsi<strong i="27">@ZBook</strong> /m/c/U/m/r/fish-shell> printf 'foo\nbar\n' | begin
                                        cat | read -zl from_cat1
                                        cat | read -zl from_cat2
                                        printf 'from_cat1: "%s"\n' $from_cat1
                                        printf 'from_cat2: "%s"\n' $from_cat2
                                    end
from_cat1: "foo
bar
"
from_cat2: ""

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдХрд┐рд╕реА рджрд┐рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдордЫрд▓реА рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдореВрд▓ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдордЫрд▓реА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдареЛрд╕ рддрд░реНрдХ рди рджреЗ рд╕рдХреЗред

рдЬрдмрдХрд┐ рдореВрд▓ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ imho рдЕрдорд╛рдиреНрдп рд╣реИ, @ рд╡рд╛рдЯрд░рд╣рд╛рдЙрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рдореБрджреНрджреЗ рд╕реНрдкреЙрдЯ-рдСрди рдФрд░ рдорд╣рд╛рди рдХреИрдЪ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ # 5219 рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ cat | meh рдорд╛рдорд▓рд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

mqudsi<strong i="8">@ZBook</strong> ~/r/fish-shell> cat | meh
a
a
b
b
^D
mqudsi<strong i="9">@ZBook</strong> ~/r/fish-shell>

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд╣реИред (рдХреИрдЯ) рдХреЛ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдХрдорд╛рдВрдб рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рдЙрд╕ рдкрд░ рдмрд╣реБрдд рдЕрд╕рд╣рдордд рд╣реВрдВ!

рдмрд┐рд▓реНрд▓реА рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП / dev / tty рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ

рдпрд╣ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдмрд┐рд▓реНрд▓реА рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП "рд╡рд░реНрддрдорд╛рди рд╕реНрдЯрдбрд┐рди" рд╕реЗ рдЬреБрдбрд╝рддреА рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдмреНрд▓реЙрдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЯреНрдЯреА рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИ! рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ / рджреЗрд╡ / tty рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ред

рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ рдЬрд╣рд╛рдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрддрд░ рдХреЗ рдХреБрдЫ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ "рдЙрдкрдзрд╛рд░рд╛" рдирд╣реАрдВ рдкрдврд╝ рд░рд╣реЗ рдереЗ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реЗ рд╕рднреА "рд╡реИрд╢реНрд╡рд┐рдХ" рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЗред рдЬреИрд╕реЗ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдкрд░ echo (fzf) рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рд╕реНрдЯрдбрд┐рди рдирд╣реАрдВ рд╣реИред

рддреЛ рдореИрдВ рдЬреЛ рдХрд╣реВрдВрдЧрд╛ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

echo | echo (cat) # from tty

begin
   echo | echo (cat) # from file
end < file

рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ (# 1035) рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ stderr рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдкреБрд░рд╛рдиреЗ math рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред

рдпрд╣ рдЗрд╕рдХрд╛ рд╕рд╛рд░рдВрдЧреА рднрд╛рдЧ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдХрд╛рд░реНрдп (cat) , рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЯреНрдЯреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╛ рдЖрдк рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ </dev/tty рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ?

рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдмрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрд╖реНрдардХ рд╕рд░рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА "рдХреЛрд╖реНрдардХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдКрдкрд░ рдХреА рд▓рд╛рдЗрди рдкрд░ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдВ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ, рдФрд░ рдЪрд░ рдХреЛ рдпрд╣рд╛рдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ") рдпрд╛ рдпрджрд┐ рд╡реЗ ' рдкреБрдирдГ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯреВрдЯрд╛ рд╣реБрдЖ) рд╕рдм-рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рдиред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдо рд╕рд╣рдорддрд┐ рдереА рдХрд┐ рдордЫрд▓реА рдХреЛ рдЙрдЪрд┐рдд рдЙрдк-рд╕рдорд░реНрдерди рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд░рд╛рджрд╛ рд╣рдореЗрд╢рд╛ "рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░" рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдкреВрд░реНрд╡ рд╣реИ, рддреЛ рд╣рд╛рдВ, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдХреЛрд╖реНрдардХреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдЕрд▓рдЧ рд░реЗрдЦрд╛ рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЗрдирдкреБрдЯ рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди subshells рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЛ рдРрд╕реА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рджреАрдВ, рдЬреЛ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдФрд░ рд╕рдХреНрд╖рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬреЛ рднреА рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрдирдкреБрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рдПрдХ рд╕рдм-рдбрд┐рд▓реЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕реНрдЯрдб рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдХреЗ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд

рдХреНрдпрд╛ рдХреЛрд╖реНрдардХ рд╕рд░рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд "рдХреЛрд╖реНрдардХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдКрдкрд░ рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдереЗ, рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдПрдБ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдпрд╣рд╛рдБ рдЪрд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ") рдпрд╛ рдпрджрд┐ рд╡реЗ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯреВрдЯ рдЧрдП) рдирд┐рд░реНрд╡рд╛рд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реЛред

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ, рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред

рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдкрдврд╝рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рд╕реНрдЯрдб рд╣реЛ (рдЬреИрд╕реЗ fzf рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ)ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯрдб рд╕реЗ рдкрдврд╝рдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЧреИрд░-рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдЯреНрдЯреА рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдкрдврд╝реЗрдВрдЧреЗред рдФрд░ рдЪреВрдВрдХрд┐ рдЯреНрдЯреА рд╕реЗ рдкрдврд╝рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ (рдЙрд╕ </dev/tty рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рддреЛ рдЗрд╕реЗ рджреНрд╡рд┐рддреАрдпрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдореЙрдбрд▓ рдХрд╛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдореЗрдВ </dev/tty рдХрд╛ рдХреЛрдИ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛрд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЧрд╣рд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ: рдореИрдВ (z) рдмрд┐рд▓реНрд▓реА рд╕реЗ pv рд╕реЗ mysql cli (рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмреИрдХрдЕрдк рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП stdout рдХреЛ рдкрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрдиреЗрдХреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред :

function mysqlenv --description connect to mysql server using config from .env
  mysql -u (getEnv DB_USERNAME) -p(getEnv DB_PASSWORD) (getEnv DB_DATABASE)
end

рдкрд╣рд▓реЗ рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрдирдЖрдЙрдЯ рдмрд╛рдИрдВ рдУрд░ рдХрдорд╛рдВрдб рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рднреНрд░рдорд┐рдд рд╣реВрдВред рдареАрдХ рд╣реИ mysqlenv рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред рдЕрдм рдореИрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ "рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП" рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХреЛрд╢рд┐рд╢ рдХреА:

  • cat -|mysql... рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ; mysql рдХреЛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ; ctr + c рдореМрдЬреВрдж рд╣реИ mysql; рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдкрд╛рдЗрдк рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  • mysql... <&0 рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ; mysql рдХреЛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ; ctr + c рдореМрдЬреВрдж рд╣реИ mysql; рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдкрд╛рдЗрдк рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  • set input (cat); mysql... рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ; mysql рдХреЛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ; ctr + c рд╕рднреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ; рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ
  • read -z|mysql... рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ; mysql рдХреЛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ; ctr + c ^c рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ

рдлрд┐рд░ рд╕реЗ рдореЗрд░рд╛ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ: zcat some_backup.sql.gz|pv -s (zsize some_backup.sql.gz)|mysqlenv ред рдпрд╣ рдкрд╛рдЗрдк рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рд╕реАрдзреЗ mysql рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдордЫрд▓реА рдлрд╝рдВрдХреНрд╢рди inbetween рдХреЗ рдмрд┐рдирд╛) - рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреЛ рдХреГрдкрдпрд╛ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕реНрдЯрд╛рдЗрди рдХреЛ рдлрдВрдХреНрд╢рди рд╕реЗ рд╕реНрдЯреИрдбрд┐рди рдХреИрд╕реЗ рджреЗрдВ?

рдордд рдХрд╣реЛ рдореБрдЭреЗ while read... рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд░ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред

@tflori : рдмрд╣реБрдд рд╕рд░рд▓ред рдмрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдЬреИрд╕реЗ рдХрд┐, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗред рд╕рдорд╕реНрдпрд╛ рд╕реАрдзреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣

function foo
    cat
end

рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред cat рд╕реНрдЯрдб рдорд┐рд▓рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдпрд╣ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдЗрд╕ рдмрдЧ рдХреЛ рдорд╛рд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред

@ рдлрд╛рд╣реЛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреБрд░рд╛рдирд╛ рд╣реИ? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 2.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рд╢рд╛рдпрдж рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреБрд░рд╛рдирд╛ рд╣реИ? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 2.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

@tflori : рд╣рд╛рдБ, рдЖрдк 3.0.2 рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ismay picture ismay  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pawlosck picture pawlosck  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

frankyan picture frankyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

luc-j-bourhis picture luc-j-bourhis  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

badp picture badp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ