แƒ›แƒงแƒ˜แƒกแƒ˜แƒ”แƒ แƒแƒ“ แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— แƒœแƒแƒชแƒœแƒแƒ‘แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜

แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒแƒœแƒฃ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒฎแƒกแƒœแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒก Explorer/Finder-แƒ“แƒแƒœ. แƒ“แƒ แƒ•แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ‘.

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜. แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒ— แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒ  แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“, แƒ“แƒ แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ iTunes-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . Windows-แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒแƒก (แƒแƒœ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ“แƒ”แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒแƒก) แƒกแƒแƒญแƒ˜แƒ แƒ แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ˜แƒ™แƒแƒ แƒ’แƒ”แƒ‘แƒ: แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ—แƒฅแƒ•แƒ”แƒœ แƒฌแƒแƒจแƒแƒšแƒ”แƒ— GIMP แƒ“แƒ ico แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒงแƒฃแƒ แƒ”แƒ‘แƒšแƒ˜แƒ“แƒแƒœ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒš แƒคแƒแƒขแƒ แƒ’แƒแƒšแƒ”แƒ แƒ”แƒแƒจแƒ˜. แƒ แƒแƒขแƒแƒ›? แฒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก? แƒฃแƒชแƒœแƒแƒ‘แƒ˜... แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒแƒฎแƒแƒšแƒ˜ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒแƒ แƒ˜ แƒแƒœ, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒแƒฎแƒแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ? แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ”แƒ แƒ—แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒ? แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ“แƒ˜แƒแƒšแƒแƒ’แƒ”แƒ‘แƒจแƒ˜ แƒ—แƒแƒ’แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒ˜แƒ.

แƒแƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ›แƒ” แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒ” แƒแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ Dropbox-แƒ–แƒ” แƒ“แƒ แƒแƒฎแƒšแƒ แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ›แƒงแƒ˜แƒกแƒ˜แƒ”แƒ แƒแƒ“ แƒ“แƒแƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒก แƒกแƒแƒ›แƒงแƒแƒ แƒ แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ  แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜. แƒ“แƒ แƒ แƒแƒก แƒ”แƒšแƒแƒ“แƒ˜แƒ— แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒฌแƒ”แƒšแƒ˜... แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก Windows-แƒ˜แƒกแƒ แƒ“แƒ macOS-แƒ˜แƒก แƒ แƒ”แƒชแƒ”แƒžแƒขแƒ˜.

Windows

แƒ•แƒ˜แƒœแƒ“แƒแƒฃแƒกแƒ˜แƒก แƒ™แƒแƒœแƒกแƒแƒšแƒจแƒ˜ cmd.exe แƒ”แƒก แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒแƒ  แƒ”แƒขแƒแƒžแƒแƒ“:

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

แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒซแƒแƒšแƒแƒจแƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ•. แƒ˜แƒ›แƒ˜แƒกแƒ“แƒ แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“, แƒ แƒแƒ› แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜. แƒ“แƒ แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒžแƒ แƒแƒชแƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก (%%1) แƒ’แƒแƒแƒ แƒ›แƒแƒ’แƒ”แƒ‘แƒ bat แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก. Windows 7 Ultimate 64-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒงแƒแƒ แƒโ€ฆ

MacOS

MacOS-แƒจแƒ˜ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒฃแƒขแƒ˜. แƒ˜แƒ’แƒ˜ แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— brew install duti. แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

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

แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒซแƒแƒšแƒแƒจแƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ•, แƒกแƒฃแƒ“แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ. แƒแƒฅ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ โ€žcom.apple.TextEditโ€œ แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ”แƒ’แƒ แƒ”แƒ— แƒฌแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ โ€žbundle idโ€œ. แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ โ€žแƒ แƒ”แƒ“แƒแƒฅแƒขแƒแƒ แƒ˜โ€œ แƒแƒ แƒ˜แƒก แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ˜แƒก แƒขแƒ˜แƒžแƒ˜: โ€žแƒ แƒ”แƒ“แƒแƒฅแƒขแƒแƒ แƒ˜โ€œ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, โ€žแƒ›แƒแƒงแƒฃแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜โ€œ แƒกแƒแƒœแƒแƒฎแƒแƒ•แƒแƒ“, โ€žแƒงแƒ•แƒ”แƒšแƒโ€œ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— "Bundle id" แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒœแƒแƒ˜แƒ แƒแƒ“: แƒ—แƒฃ แƒแƒ แƒ˜แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก "/Applications/Sublime Text.app", แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ˜แƒกแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก ID แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ "com.sublimetext.3" แƒแƒœ แƒกแƒฎแƒ•แƒ:

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

แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ macOS Sierra-แƒ–แƒ”.

Windows-แƒ˜แƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ (.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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ