рддреБрд░рдВрдд рдкрд░рд┐рдЪрд┐рдд рдлрд╝рд╛рдЗрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рди рд╕реЗрдЯ рдХрд░реЗрдВ

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рди, рдЕрд░реНрдерд╛рдд, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЬреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░/рдлрд╛рдЗрдВрдбрд░ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдЧрд╛ред рдФрд░ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ.

рд╕рдорд╕реНрдпрд╛рдПрдБ рдкрд╣рд▓реЗ. рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдХреНрд╕рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдЦреЛрд▓реА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЦреЛрд▓реА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдХреБрдЫ iTunes рджреНрд╡рд╛рд░рд╛ред рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рддрд╣рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрд╕реНрдЯреЙрд▓ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓) рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХрднреА-рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЬрд╛рддреА рд╣реИрдВ: рдХрднреА-рдХрднреА рдЖрдк рдЬреАрдЖрдИрдПрдордкреА рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдИрд╕реАрдУ рдлрд╛рдЗрд▓реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╡реНрдпреВрдЕрд░ рд╕реЗ рдорд╛рдирдХ рдлреЛрдЯреЛ рдЧреИрд▓рд░реА рдореЗрдВ рд▓реЗ рд▓реА рдЬрд╛рддреА рд╣реИрдВред рдХреНрдпреЛрдВ? рдХрд┐рд╕ рд▓рд┐рдП? рдЕрдЬреНрдЮрд╛рдд... рдпрджрд┐ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рд╕рдВрдкрд╛рджрдХ рдпрд╛, рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдПрдХ рддрд╛рдЬрд╝рд╛ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдорд┐рд▓ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реЛрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдВрд╡рд╛рджреЛрдВ рдореЗрдВ рдЪреВрд╣реЛрдВ рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдПрдХ рдРрд╕рд╛ рдордиреЛрд░рдВрдЬрди рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд░ рджреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рд╣реЗрдЬреАрдВ рдФрд░ рдЕрдм рдореИрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рджреБрдирд┐рдпрд╛ рдХреЛ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдБред рдФрд░ рдЖрдк рдЗрддрдиреЗ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдХрд┐рд╕рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ... рдЕрдЧрд▓рд╛ рд╣реИ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдореИрдХрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдиреБрд╕реНрдЦрд╛ред

Windows

рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрдВрд╕реЛрд▓ рдореЗрдВ cmd.exe рдпрд╣ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

ftype my_file_txt="C:Windowsnotepad.exe" "%1"
assoc .txt=my_file_txt

рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдкреНрд░рднрд╛рд╡реА рд╣реЛрддреЗ рд╣реИрдВ. рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдмреИрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪрд▓рддреЗ рд╕рдордп рдкреНрд░рддрд┐рд╢рдд рдЪрд┐рд╣реНрди (%%1) рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рд╡рд┐рдВрдбреЛрдЬ 7 рдЕрд▓реНрдЯреАрдореЗрдЯ 64-рдмрд┐рдЯ рдХреА рдЬрд╛рджреБрдИ рджреБрдирд┐рдпрд╛...

macOS

MacOS рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕реЛрд╕рд┐рдПрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд░реНрддрд╡реНрдп. рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ brew install duti. рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

duti -s com.apple.TextEdit .txt "editor"

рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдкреНрд░рднрд╛рд╡реА рд╣реЛрддреЗ рд╣реИрдВ, рд╕реВрдбреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣рд╛рдВ рддрд░реНрдХ "com.apple.TextEdit" рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рддрдерд╛рдХрдерд┐рдд "рдмрдВрдбрд▓ рдЖрдИрдбреА" рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред "рд╕рдВрдкрд╛рджрдХ" рддрд░реНрдХ рд╕рдВрдмрджреНрдзрддрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП "рд╕рдВрдкрд╛рджрдХ", рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рджрд░реНрд╢рдХ", рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП "рд╕рднреА"ред

рдЖрдк "рдмрдВрдбрд▓ рдЖрдИрдбреА" рдЗрд╕ рддрд░рд╣ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдпрджрд┐ рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ "/рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рд╕рдмрд▓рд╛рдЗрдо рдЯреЗрдХреНрд╕реНрдЯ.рдРрдк" рд╣реИ, рддреЛ рдЗрд╕рдХреА рдмрдВрдбрд▓ рдЖрдИрдбреА "com.sublimetext.3" рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╣реЛрдЧреА:

> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3

MacOS Sierra рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ (.bat)

@echo off

set XNVIEW=C:Program Files (x86)XnViewxnview.exe
set SUBLIME=C:Program FilesSublime Text 3sublime_text.exe
set FOOBAR=C:Program Files (x86)foobar2000foobar2000.exe

call :assoc_ext "%SUBLIME%" txt md js json css java sh yaml
call :assoc_ext "%XNVIEW%" png gif jpg jpeg tiff bmp ico
call :assoc_ext "%FOOBAR%" flac fla ape wav mp3 wma m4a ogg ac3

goto :eof

:assoc_ext
  set EXE=%1
  shift
  :loop
  if "%1" neq "" (
    ftype my_file_%1=%EXE% "%%1"
    assoc .%1=my_file_%1
    shift
    goto :loop
  )
goto :eof

MacOS рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ (.sh)

#!/bin/bash

# this allows us terminate the whole process from within a function
trap "exit 1" TERM
export TERM_PID=$$

# check `duti` installed
command -v duti >/dev/null 2>&1 || 
  { echo >&2 "duti required: brew install duti"; exit 1; }

get_bundle_id() {
    osascript -e "id of app """ || kill -s TERM $TERM_PID;
}

assoc() {
    bundle_id=$1; shift
    role=$1; shift
    while [ -n "$1" ]; do
        echo "setting file assoc: $bundle_id .$1 $role"
        duti -s "$bundle_id" "." "$role"
        shift
    done
}

SUBLIME=$(get_bundle_id "Sublime Text")
TEXT_EDIT=$(get_bundle_id "TextEdit")
MPLAYERX=$(get_bundle_id "MPlayerX")

assoc "$SUBLIME" "editor" txt md js jse json reg bat ps1 cfg sh bash yaml
assoc "$MPLAYERX" "viewer" mkv mp4 avi mov webm
assoc "$MPLAYERX" "viewer" flac fla ape wav mp3 wma m4a ogg ac3

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ