expand.h
ïŒ
/** Character for separating two array elements. We use 30, i.e. the ascii record separator since that seems logical. */
#define ARRAY_SEP 0x1e
/** String containing the character for separating two array elements */
#define ARRAY_SEP_STR L"\x1e"
ããã«ããã次ã®ããã«ãªããŸãã
xiaq<strong i="10">@blackie</strong> ~> set a (printf 'a\x1eb')
xiaq<strong i="11">@blackie</strong> ~> count $a
2
xiaq<strong i="12">@blackie</strong> ~> set a (printf 'a\x1fb')
xiaq<strong i="13">@blackie</strong> ~> count $a
1
char \ x1eãèŠçŽ åºåãæåãšããŠç¹å¥ã«æ±ãããããšã¯æããã§ãã
\ x1eãè¡šãæ¹æ³ããªããšããæžå¿µã¯ãããŸããïŒ ãããšããã¢ãŒããã¯ãã£ã®æ¹åã«ã€ããŠèããŠããŸããïŒ
é ååºåãæåã¯äž»ã«ããŠãããŒãµã«å€æ°ãç°å¢å€æ°ãªã©ãæååã®ã¿ãåãåãå Žæã§é åãæ°žç¶åããããã«äœ¿çšããããšæããŸãã
åš2012-12-12äžå2:09ããã°ãããéã [email protected]åéïŒ
\ x1eãè¡šãæ¹æ³ããªããšããæžå¿µã¯ãããŸããïŒ ãŸãã¯ããªãã¯èããŠããŸãã
ã¢ãŒããã¯ãã£ã®æ¹åã«ã€ããŠïŒ
ç§ã¯äž¡æ¹ã®æžå¿µã念é ã«çœ®ããŠãããšæããŸãã åè
ã®å Žåã¯ã
\ x1eãåã蟌ãŸãããã¡ã€ã«åã POSIXã¯\ 0以å€ã¯èš±å¯ãããŠãããšèšã£ãŠããŸã
ãã¡ã€ã«åãªã®ã§ãããã¯å®å
šã«å¯èœã§ãã é
ååºåãæåãšããŠ\ 0ã䜿çšãããšã
å°ãè¯ãéžæã§ãããããã¯2çªç®ã®æžå¿µã«ã€ãªãããŸã-ããã¯
å£ãããããæããã«ééã£ãŠããŸãã
é ååºåãæåã¯ãäž»ã«å Žæã«é åãæ°žç¶åããããã«äœ¿çšããããšæããŸã
ãŠãããŒãµã«å€æ°ãç°å¢å€æ°ã®ããã«ãæååã®ã¿ãåããŸãã
æ°žç¶åããã·ãªã¢ã«åããæå³ããå Žåããããã é
åã¯åžžã«ã«æ ŒçŽãããŸã
\ x1e-åºåããã圢åŒã ãšã¯ã¹ããŒããããç°å¢ã¢ã¬ã€ã¯ãïŒãã§çµåãããŸãã 圌ã
ãã ãããŠãããŒãµã«å€æ°ã§äœ¿çšãããŸã-ã©ã®IMHOãå®è£
ããå¿
èŠããããŸãã
代ããã«é©åãªãšã¹ã±ãŒããè¡ããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ç§çšé åã®æåãåºåãæåãšããŠäœ¿çšããã®ã¯ã©ãã§ããïŒ éã¯ãã§ã«ãããã®ããã€ãã䜿çšããŠããå ŽåããããŸãã
@JanKanisããã¯è¯ããããŸããã ãã¡ã€ã«åïŒutf8以å€ã®ãã€ãã£ããšã³ã³ãŒãã£ã³ã°ã䜿çšãããã¡ã€ã«ã·ã¹ãã ãèæ ®ïŒããã®ä»ã®æååã§å®å šã«å¯èœã§ãã
ãšãããã "\0"
ã¯ãUNIXããã¡ã€ã«åã§çŠæ¢ããŠããå¯äžã®æåã§ããããããšããã_ãã_è¯ãéžæã ãšæããŸãããããã§ãç§ã«ã¯æªèãããŸãã ãŸãããã§ã«å€ãã®é
åã®åå²ãšçµã¿ç«ãŠãè¡ã£ãŠããŸããçã®é
åãå®è£
ãããšãã¢ãŒããã¯ãã£ãæ¹åãããã³ãŒããå°ãªããªããšæããŸãã
Fishã¯ãå€éšæååãwcharã«ãšã³ã³ãŒããããšãã«ããã§ã«ãã©ã€ããŒã䜿çšæåãšç¡å¹ãªãã€ããåŠçããŠããŸãã ãããã®ç¹å¥ãªå€ã¯ããã€ãããšã«ç¹å®ã®ç§çšæåã®ã»ããã«ãšã³ã³ãŒããããfishã¯åºåæã«åã³ãã³ãŒããããããååãšããŠãå¥ã®ç§çšæåã䜿çšãããšæ©èœããŸãã ãã ããçã®é åã䜿çšããæ¹ãã¯ããã«åªããŠããããšã«åæããŸãã fishãšfishdã®éã®éä¿¡ã¯ãutf8æååã䜿çšããŠãœã±ãããä»ããŠè¡ããããšããè€éãªåé¡ããããŸããããã§ãfishã¯ïŒ0x1eãã€ãã§ã¯ãªãïŒãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã\ x1eãã䜿çšããŠé åã¢ã€ãã ãåé¢ããŸãã ããããããã¯ãããããããšãã°ãã©ã€ããŒããªæªäœ¿çšã®ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã䜿çšããããšã§è§£æ±ºã§ããŸãã
ç§ã¯xiaqã®æžå¿µãå ±æããŠããŸãããïŒå®éã®æžå¿µã«ã€ããŠã¯ïŒæé»ã®åå²ã\ nã¯ããã«äžå¿«ã§ããããšãããããŸããã
a<strong i="6">@raspeball</strong> ~> count (printf 'a\x1eb')
1
a<strong i="7">@raspeball</strong> ~> count (printf 'a\nb')
2
ãµãããã»ã¹åºåã®ïŒæ¹è¡ã§åºåãããïŒé å解éã¯ãæ瀺çãã€ãªãã·ã§ã³ã§ããå¿ èŠããããŸãã
ããããããã¯ããããã¢ã¬ã€ã®åºç€ãšãªãã¹ãã¬ãŒãžãšã¯äœã®é¢ä¿ããããŸããâŠ
@xiaq ïŒ \0
ã䜿çšããããšã®äœãåé¡ã«ãªã£ãŠããŸããïŒ xargs
ã¯ãããããä¿¡é Œã§ããããªãã·ã§ã³ãšããŠäœ¿çšããŠããããã§ãã
ç°å¢å€æ°ã§\0
ã䜿çšããããšã¯ã§ããªããããé
åãåã·ã§ã«ã«ãšã¯ã¹ããŒãããã®ãé£ãããªããŸãã
ç§ã¯zshãã移è¡ããŠããããã®ã·ãŒã±ã³ã¹ã䜿çšããŠããçµåããããå€æ°æ©èœãå©çšããŠã$ LESSenvå€æ°ãé©åãªæ¹æ³ã§å®çŸ©ããŠããŸãã
typeset -xT LESS less ' '
less=(
--HILITE-UNREAD
--LONG-PROMPT
)
ç°¡æœã«ããããã«ããªãã·ã§ã³ã®å®å šãªãªã¹ãã¯çç¥ããŸããã zshã§ã¯ã$ LESS env varã¯ã$ lessé åå ã®ãªãã·ã§ã³ã®ã¹ããŒã¹ã§åºåããããªã¹ãã«ãªããŸãã éã«çžåœãããã®ã¯ãèŠçŽ ãã¬ã³ãŒãåºåãæåïŒ\ x1eïŒæåã§åºåãããçµæã«ãªããŸãã é åã®èŠçŽ ã¯ã¹ããŒã¹ã§åºåããããšã®ããã¥ã¡ã³ãã«ãé¢ãããïŒPATHãªã©ã®ç¹å¥ãªé åãæ³ãšããŠïŒã æåŸ ãããçµæãåŸãã«ã¯ãå€ãåäžã®æååã«è£éããå²ãåœãŠãæ瀺çã«è¡ãå¿ èŠããããŸãã
set -x LESS --HILITE-UNREAD \
--LONG-PROMPT
set LESS "$LESS"
çŸæç¹ã§ã¯ã\ x00ã§ã¯ãªã\ x1eãé åã®ã·ãªã¢ã«åã«å éšçã«äœ¿çšãããŠãããã©ããã¯æ°ã«ããŸããã ãšã¯ã¹ããŒããããé åã®èŠçŽ ã\ x1eã§åºåãããŠããããšã«æ³šæããŠãã ããã ããã¯ãã å£ããŠãããééã£ãŠãããfubarã§ãã 圢容è©ãéžãã§ãã ããã ãŸããåè¿°ã®åé¿çããã³ææžåãããåäœãšãççŸããŸãã ãã®åé¡ã¯ããã°IMHOãšããŠã¿ã°ä»ãããå¿ èŠããããŸãã
PSãããã¥ã¡ã³ãã®ã©ãã«ãã¬ã³ãŒãåºåãæåïŒ\ x1eïŒã®äœ¿çšã«ã€ããŠã¯èšåãããŠããŸããã ããã¯å¥ã®åé¡ã§ãã
@ krader1961ãããå ±æããŠããã ãããããšãããããŸãã ãªã¹ãã®ãããªç°å¢å€æ°ã«ã¯ãæšæºã®UnixèŠåã¯ãããŸãããã³ãã³ã§åºåãããŠãããã®ãããã°ãã¹ããŒã¹ã§åºåãããŠãããã®ããããŸãã fishã¯\ x1eã䜿çšãããããèªèº«ã®é åãåºå¥ã§ããŸãã
ééã£ãããã¥ã¡ã³ããæããŠããã ããŸããïŒ
é åã¯ã©ã®ããã«ãšã¯ã¹ããŒãããããšæããŸããïŒã³ãã³ãã¹ããŒã¹ãæ¹è¡ããã®ä»ã éã¯ãã®ãã£ã©ã¯ã¿ãŒã®ç°å¢å€æ°ãããŒã¯ã³åããå¿ èŠããããŸããïŒ
ã¹ããŒã¹ã§åºåãããåŒæ°ãããŸãæåŸ
ããŠããªãããã§ãã ããããæãç°¡åãªåé¿çã¯set -x LESS '--HILITE-UNREAD --LONG-PROMPT'
ãªã©ã§ãã
å®çŸ©äžãçå·ã§åºåããããã«ãã€ãã§çµäºããããŒãšå€ã§æ§æãããä»»æã®ãã€ãã·ãŒã±ã³ã¹ã§ãããããç°å¢å€æ°ã®ãããªãªã¹ãã®æšæºã¯ãããŸããã å°å·å¯èœãªæåã§ããå¿ èŠã¯ãããŸããã ããé«ãã¬ãã«ã®æœè±¡åã®ããã«åºãåãå ¥ããããŠããå¯äžã®èŠåã¯ãPATH env varã®execlpïŒïŒé¢æ°ã«ãã£ãŠç¢ºç«ãããèŠåã§ãã
è€æ°ã®èŠçŽ ãæã€å€æ°ããšã¯ã¹ããŒããããšãã«ãé åã®èŠçŽ ãåºåãããã«\ x1Eã\ 036ã30ããŸãã¯ãã¬ã³ãŒãåºåãæåãæåã䜿çšããããšã«èšåããŠããªãéããããã¥ã¡ã³ãã¯èª€ãã§ãã ããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«èšèŒãããŠããŸã
..., and array variables will be concatenated using the space character.
ããã¯ã httpïŒ//fishshell.com/docs/current/index.htmlã®ãå€æ°ã®æ¡åŒµãã®ã»ã¯ã·ã§ã³ããã®ãã®ã§ãã åãããã¥ã¡ã³ãã®ãé åãã»ã¯ã·ã§ã³ãšãç¹æ®å€æ°ãã»ã¯ã·ã§ã³ã«èšèŒãããŠããããã«ãç¹æ®ãªã±ãŒã¹ã«åé¡ãããŠããªããšã¯ã¹ããŒããããå€æ°ã«ãããã®ã¹ããŒãã¡ã³ããé©çšããããšæšæž¬ããã®ã劥åœã§ãã
éã¯ãç°å¢å€æ°ãPATHãªã©ã®ã³ãã³ã§åºåãããç¹æ®ãªã±ãŒã¹ã®å€æ°ä»¥å€ã®ãªã¹ãã«èªåçã«ããŒã¯ã³åããã¹ãã§ã¯ãªããšç§ã¯æããŠããŸãã ãã ãããŠãŒã¶ãŒãvarãä»»æã®æåã®é åã«ããŒã¯ã³åã§ããå ç¢ãªæ段ãå¿ èŠã§ãã
å€æ°ããšã«äœ¿çšãããæåãæ§æããã¡ã«ããºã ããªãå ŽåïŒzsh "typeset -T"ã³ãã³ãïŒãé åã®èŠçŽ ãé£çµãããšãã«ã¹ããŒã¹ã䜿çšããå¿ èŠããããŸãïŒããã§ããã³ãã³ã§åºåãããç¹æ®ãªå Žåã®å€æ°ãé€ãïŒã ïŒã æããã«ãããã¯ãŠãããŒãµã«å€æ°ã®ã¹ãã¬ãŒãžãªã©ã®ãã©ã€ããŒãããŒã¿ã¹ãã¢ã«ã¯é©çšãããŸããã
æåŸã«ãenv varã䜿çšããŠãè€æ°ã®èŠçŽ ãå«ãé åãå¥ã®é¢æ°ãŸãã¯ã¹ã¯ãªããã«æž¡ãæšæºã®fishé¢æ°ã®äœ¿çšæ³ãèŠã€ããããšãã§ããŸããã§ããã ãã®ãããªãŠãŒã¹ã±ãŒã¹ã¯ååšããå¯èœæ§ããããŸãããæååã«ã¬ã³ãŒãåºåãæåãå«ãŸããå€æ°ããé åãæé»çã«åæ§ç¯ããããã«fishã«äŸåããã®ã§ã¯ãªããããŒã¿ã®ã·ãªã¢ã«å/éã·ãªã¢ã«åã«æ瀺çã«ååããã¹ã¯ãªãããå¿ èŠã§ãã
æãããã®ãã察å¿ããããšãããããŸãã ã¹ããŒã¹ã䜿çšããé£çµã«ã€ããŠåŒçšããã»ã¯ã·ã§ã³ã¯ãç¹ã«äºéåŒçšç¬Šã§å²ãŸããæååçšã§ãã ãšã¯ã¹ããŒããããé åã§äœãèµ·ãããã«ã€ããŠã®è°è«ãè¿œå ããå¿ èŠããããŸãã
ãŠãŒã¶ãŒã¯ãããšãã°set SOMEPATH (string split : $SOMEPATH)
ã䜿çšããŠæååãããŒã¯ã³åã§ããŸãã
ã¹ããŒã¹ãé£çµãããšã¯ã¹ããŒããããå€æ°ã®æ¬ ç¹ã¯ãéãååž°çã«å®è¡ããããšãã«å€æ°ãå€æŽãããããšã§ãã ä»æ¥ããã¯æ©èœããŸãïŒ
> set -x list 1 2 3
> count $list
3
> fish -c 'count $list'
3
ãã ããã¹ããŒã¹ã䜿çšããŠãšã¯ã¹ããŒãããå Žåãååž°åŒã³åºãã®å Žåã¯1ã衚瀺ãããŸãã ããªããèšãããã«ãç§ãã¡ã¯ããã«äŸåããŠããŸããããäžè²«æ§ã®èŠ³ç¹ããã¯çŽ æŽãããã§ãã
æãããã®ãã察å¿ããããšãããããŸãã
ç§ã¯ããã2çªç®ã«ããå¿ èŠããããŸãïŒ ç©äºã«ã€ããŠæ°é®®ãªèŠç¹ãæã€ããšã¯åžžã«çŽ æŽãããããšã§ãã
ãã®è°è«ã«äžæ £ããªäººã®ããã«ãç§ã¯ããã«é¢é£ããããã€ãã®ãã®ãæã¡èŸŒãå¿ èŠããããšæããŸãã
ããã«é ã«æµ®ãã¶ã®ã¯ãïŒ2090ã®ãããªåé¡ã«çŸããlistifyãã¯ã€ããªã¹ãã§ãã
ããã¯ã$ PATHã$ CDPATHãããã³$ MANPATHã®å Žåããããã¯ãã£ãã·ã³ã°ã®ãªã¹ã/é åãšããŠè¡šç€ºãããŸããããšã¯ã¹ããŒãããããšãåã³ãïŒãã§çµåãããããšãæå³ããŸãã ãã®åŸãéã®äžã®éã¯ããããåã³åå²ããŸãã ããã¯ã\ x1eã§ã¯ãªããã³ãã³ã§æ©èœããŸãã ã³ãŒãã®ç§ã®ç解ãããããã¯ãšã¹ã±ãŒãããæ©äŒããªãããã¹ãŠã®ã³ãã³ã§ãããè¡ãããã«èŠããã®ã§ãã³ãã³ãäžã«ãã$ PATHãšã³ããªã§å£ãããããããŸãã-UNIXã¯ãã¡ã€ã«ãã¹å ã§èš±å¯ããŸãããå°ãªããšã$ PATHã§ã¯å£ããŠããããã§ãã ãã®ã¹ããŒã ã¯ãããšãã°PYTHONPATHãGOPATHã«ã䜿çšãããŸãã
ããã¯å®éã«ã¯2ã€ã®ç°ãªãã¹ããŒã ã§ãããããæé»ã®always-split-on- \ x1e-except-for-these-three-split-them-on-colonããããç°å¢å€æ°ãåå²ããããã®æ瀺çãªãã®ãå¿ èŠã§ãã 1ã€ãšãªã¹ãããšã¯ã¹ããŒããããšãçŸåšãé以å€ã®ãã¹ãŠãåžžã«æ··ä¹±ããŸãã
ç§ã®å¥œãŸãã解決çã¯splitenv var1 var2 var3
ã®ãããªé¢æ°ã§ãïŒ
function splitenv --no-scope-shadowing
set -e IFS # string split doesn't have superpowers, so unset IFS lest we split on both : and \n
for arg in $argv
set -q $arg; and set $arg (string split ":" $$arg)
end
end
ïŒ string split
ã«è¶
èœåãããå Žåãããã¯å°ãç°¡åã«ãªããŸãïŒ
ãã¹ãŠã®ãªã¹ãã¯ãšã¯ã¹ããŒãæã«ã³ãã³ã§çµåãããããããŠãŒã¶ãŒã¯splitenv
ã§æ瀺çã«çµåã解é€ã§ããŸãïŒãã«ããŒé¢æ°ã«å®å
šã«æ²¡é ããŠããããã§ã¯ãããŸãããããããç°¡åã«ããã®ã¯è¯ãããšã ãšæããŸãããã¹ãäºïŒã äžäœäºææ§ã®ããã«ãèµ·åæã«splitenv PATH CDPATH MANPATH
ãå®è¡ãããŸãã ãŠãŒã¶ãŒãå¥ã®æ¹æ³ã§ãšã¯ã¹ããŒããããå Žåã¯ã string join
ã䜿çšã§ããŸãã
ããã¯ãã¹ãŠã\ x1eãäžèŠã«ãªã£ãããšãæå³ããŸããå°ãªããšãä»ã®ããã°ã©ã ã«ãã£ãŠç解ãããå¯èœæ§ãé«ãã¹ããŒã ããããŸãããïŒããªããšããŸããã¯ãªIMHOã®ïŒéã®äžã®éã¯fish -c 'splitenv list; count $list'
ãªããŸãã ã
åé¡ã¯ããã¡ãããåè¿°ã®ããã«ãéåžžã®ã³ãã³ã§åºåããããªã¹ãã¹ããŒã ã«ã¯ã³ãã³ããšã¹ã±ãŒãããæ¹æ³ããªããã³ãã³ãè¿œå ãããå Žåã string split
ã«ã¯ã-unscapedãããªãããšã§ãããšã¹ã±ãŒããããŠããªãã»ãã¬ãŒã¿ãŒã§ã®ã¿åå²ãããªãã·ã§ã³ã
ç§ã¯æå³ããããŸããïŒ
@fahoã¢ã€ãã¢ã«ã¯ã¡ãªããããããšæããŸãã å€ãã¹ããŒã ã®ææªã®éšåã¯ãã³ãã³ã§æé»çã«åå²ããããšã§ãããããã¯ãåå²ãããã¹ãã§ã¯ãªãå€æ°ããã³ã°ã«ããŸãã ããªãã®èãã§ã¯ãããã¯ïŒã»ãšãã©ïŒåžžã«æ瀺çã§ãããããéåžžã«å®å šã ãšæããŸãã
ãšã¹ã±ãŒãã«é¢ããŠã¯ãPATHã§ã³ãã³ããšã¹ã±ãŒãããªãããšã¯ãèŠã€ãããªã³ã¯ããšã«æå³çã«è¡ãããŸãã PYTHONPATHãCLASSPATHãªã©ããã®ç¹ã§ãã以äžäžè²«ããŠãããšã¯æããŸããã ãããã®ãã¹ã§ã¯ã³ãã³ã䜿çšã§ããªããããã³ãã³ããšã¹ã±ãŒããããã©ãããéžæã§ããŸãã ãã ããã³ãã³ããšã¹ã±ãŒãããå Žåã¯ãããã¯ã¹ã©ãã·ã¥ããšã¹ã±ãŒãããå¿ èŠããããŸããPATHã«ããã¯ã¹ã©ãã·ã¥ãå«ããããšãã§ãããšæããŸãã ãéããªãããã¯ã€ããªã¹ããå¿ èŠã«ãªãå ŽåããããŸãïŒughïŒã
ãŸãã¯ãããã«ã€ããŠå¿é ããå¿ èŠã¯ãªããã³ãã³ãåºåãæåãšããŠæ©èœãããã ãã§ãã ã·ã³ãã«ããšä»ã®ã·ã§ã«ã«ç²ŸéããŠãããããç§ã¯ããã«åŸåããŠãããšæããŸãã
ãªã¹ãã®ãããªå€æ°ã®äžã«ã¯ã¹ããŒã¹ã§åºåãããŠãããã®ãšãã³ãã³ã§åºåãããŠãããã®ããããšããåé¡ã«ãŸã çŽé¢ããŠããŸãã 1ã€ã®å¯èœæ§ã¯ã splitenv
ãåºåãæåãåãå
¥ãããããèšæ¶ããããã䜿çšããŠãšã¯ã¹ããŒãæã«å€ãåæ§ç¯ããããšã§ãã
splitenv --on ' ' LESS
splitenv --on ':' PYTHONPATH
ãããã®åŒã³åºãã¯ãæ¢åã®å€æ°ãã€ã³ããŒãããããšãšãå€æ°ãã©ã®ããã«ãšã¯ã¹ããŒããããããããŒã¯ããããšã®2ã€ã®åœ¹å²ãæãããŸãã ã©ãæããŸããïŒ
ãŸããconfig.fishãç·šéããã«ãããè¡ãæ¹æ³ã¯ãããŸããïŒ å€åæ®éçãªå€æ°ã®äžéšãšããŠïŒ
ãªã¹ãã®ãããªå€æ°ã®äžã«ã¯ã¹ããŒã¹ã§åºåãããŠãããã®ãšãã³ãã³ã§åºåãããŠãããã®ããããšããåé¡ã«ãŸã çŽé¢ããŠããŸãã 1ã€ã®å¯èœæ§ã¯ãsplitenvãåºåãæåãåãå ¥ãããããèšæ¶ããããã䜿çšããŠãšã¯ã¹ããŒãæã«å€ãåæ§ç¯ããããšã§ãã
ããã§ããã ãšã«ããC ++åŽããã®ååãå¿ èŠãªã®ã§ããã®æç¹ã§splitenvãã¹ã¯ãªããã«ããããšã¯ãããã圹ã«ç«ããªãã§ãããã
ãããã®åŒã³åºãã¯ãæ¢åã®å€æ°ãã€ã³ããŒãããããšãšãå€æ°ãã©ã®ããã«ãšã¯ã¹ããŒããããããããŒã¯ããããšã®2ã€ã®åœ¹å²ãæãããŸãã
ãsplitenvãã¯ãã¯ãå®ç§ãªååã§ã¯ãªãå¯èœæ§ããããŸãïŒãã¡ãããç§ããããèãããšãã§ããïŒç¬ãïŒïŒ-ç§ã¯ãlistifyããæ€èšããŸããã
以åã«é¢é£ããè°è«ãã©ãã«ãã£ãã®ãæãåºããªãã®ã¯ç§ãæ©ãŸããŠããŸãããä»å€ãåé¡ã粟æ»ããå¿ èŠããããšæããŸãã
ãŠãŒã¶ãŒã¯ãããšãã°
set SOMEPATH (string split : $SOMEPATH)
ã䜿çšããŠæååãããŒã¯ã³åã§ããŸãã
string
ã³ãã³ãã¯ãç§ãèŠã€ããããšãã§ããå Žæã«ã¯ææžåãããŠããŸããã ãŸãã man string
ã¯ãBSDïŒããã³Mac OS XïŒã§ã®æååæäœé¢æ°ãææžåããstringïŒ3ïŒã®ããã¥ã¢ã«ããŒãžã瀺ããŠããŸãã
ãã ããã¹ããŒã¹ã䜿çšããŠãšã¯ã¹ããŒãããå Žåãååž°åŒã³åºãã®å Žåã¯1ã衚瀺ãããŸãã ããªããèšãããã«ãç§ãã¡ã¯ããã«äŸåããŠããŸããããäžè²«æ§ã®èŠ³ç¹ããã¯çŽ æŽãããã§ãã
ãã ãããã®åäœã¯é©ãã¹ããã®ã§ãã 100人ã«è€æ°ã®èŠçŽ ãæã€å€æ°ããšã¯ã¹ããŒããããšã©ããªãããå°ãããšããã®ãã¡ã®90人ã¯ãå€ãåºåãæåãšããŠã¹ããŒã¹ãšé£çµãããŠãããšèšãã§ãããã åºåãæåãšããŠã³ã³ããŸãã¯ä»ã®æåã䜿çšãããŠãããšèšã人ããããããããŸããã ãŸãã env
ãå®è¡ãã2人ã¯ã cat -evt
ã®ãããªãã®ã§åºåããã£ã«ã¿ãªã³ã°ããªãéããã¬ã³ãŒãã®åºåãæåã衚瀺ãããªããããå€ã¯åºåãæåãªãã§é£çµãããŠãããšèšããŸãã
ïŒ2090ã®ãããªåé¡ã«çŸããŸã
ç³ãèš³ãããŸãããããã®ãŠãŒã¶ãŒã®èŠæ ã«ã¯äœã®ã¡ãªããããããŸããã ãã®åé¡ã¯ãMANPATHããã§ã«èšå®ãããŠãããã©ãããæ瀺çã«ãã¹ãããããšã§ç°¡åã«åé¿ã§ããŸãã ããã¯ãå é ã®ã³ãã³ãšæ«å°Ÿã®ã³ãã³ã®ã»ãã³ãã£ã¯ã¹ãèãããšããããã«ããŠãããªããããªããã°ãªããªãããšã®ããã«æããŸãã
ãã®ãããã³ãã³ãå«ãŸããŠãã$ PATHãšã³ããªã§ç Žæããå¯èœæ§ããããŸã
ãããä¿®æ£ããã«ã¯å°ãªããšã30幎ã¯é ãããŸãã éæšæºã®åäœã«ãªããããã³ãã³ã®ãšã¹ã±ãŒãïŒããã³æ¡åŒµããŠãšã¹ã±ãŒãæåïŒãå®è£ ããªãã§ãã ããã æè¿ãŸã§ãç§ã¯UNIXãµããŒãã¹ãã·ã£ãªã¹ããšããŠ20幎以äžãéãããŸããã $ PATHãŸãã¯åæ§ã®å€æ°ã«åã蟌ãŸãããã£ã¬ã¯ããªã«ã³ãã³ãååšããããšãåé¡ã§ãããšèª°ããäžæºãèšãã®ãèããããšããããŸããã
ç§ã®å¥œãŸãã解決çã¯ãsplitenv var1 var2var3ã®ãããªé¢æ°ã§ãã
ïŒææžåãããŠããªãïŒ string split
ãååã§ãªãçç±ã¯æããã§ã¯ãããŸããããããã¯åé¡ãããŸããã æ°ããé¢æ°ãå¿
èŠãã©ããã«é¢ä¿ãªããæ°ããèªååå²envå€æ°ãè¿œå ããªãã§ãã ããã åäœãä¿èšŒããã®ã«ååã«äžè¬çãªã®ã¯ãPATHãšCDPATHïŒããã³ãã§ã«ç¹æ®ãªã±ãŒã¹ã§ããããMANPATHïŒã®2ã€ã ãã§ãã PYTHONPATHã®ãããªä»ã®å€æ°ã¯ãæçšã§ãããšå€æããå ŽåããŠãŒã¶ãŒãæ瀺çã«åå²ã§ããŸãã
ãã ããç¹å®ã®å€æ°ïŒPYTHONPATHãªã©ïŒããšã¯ã¹ããŒããããšãã«ããã®èŠçŽ ãç¹å®ã®åºåãæåãšé£çµããå¿
èŠãããããšãç»é²ããæ¹æ³ã¯ç¢ºãã«ããã¯ãã§ãã ãããè¡ãæãèªç¶ãªæ¹æ³ã¯ã set
ã³ãã³ãã®æ°ãããªãã·ã§ã³ã䜿çšããããšã§ãã äŸãã°ã
set -x -S ':' PYTHONPATH dir1 dir2 dir3
ããã¯ãã¬ã³ãŒãåºåãæåcharãåŒãç¶ã䜿çšããããŠãããŒãµã«varããŒã¿ã¹ãã¢ã§ã®varã®æ ŒçŽæ¹æ³ã«ã¯åœ±é¿ããããã®ããŒã¿ã¹ãã¢ããããŒãããããšèªååå²ãããŸãã 決å®ãããã®ã¯ããšã¯ã¹ããŒãçšã«ç»é²ãããåºåãæåãæååè£éã«ã圱é¿ãäžãããã©ããã§ãã ç§ã®æ°æã¡ã¯ããããã¹ãã ãšããããšã§ãã ã€ãŸããäžèšã®ãsetãã³ãã³ããå®è¡ãããå ŽåãåŸç¶ã®
echo "PYTHONPATH is $PYTHONPATH"
PYTHONPATHã®å€ãé£çµããã«ã¯ãã¹ããŒã¹ã§ã¯ãªãã³ãã³ã䜿çšããå¿ èŠããããŸãã ããã©ã«ãã®åºåãæåã¯ãæ¢åã®ã»ãã³ãã£ã¯ã¹ãä¿æãããŠãŒã¶ãŒã®é©ããæå°éã«æããããã®ã¹ããŒã¹ã§ãã PATHã®ãããªç¹æ®ãªã±ãŒã¹ã®å€æ°ãããã®äŸã§ã¯ã³ãã³ã䜿çšããããšã«æ³šæããŠãã ããã ããã¯çŸåšã®åäœãšäºææ§ããããŸããããæ°ããã»ãã³ãã£ã¯ã¹ãšäžèŽããŠãããããã»ã©é©ãããšã§ã¯ãããŸããã èšãæãããšããšã¯ã¹ããŒããããç°å¢ã§ã¯$ PATHã®èŠçŽ ãã³ãã³ã§åºåãããŠããã®ã«ã
echo "PATH is $PATH"
æååã³ãã³ãã¯ãç§ãèŠã€ããããšãã§ããå Žæã«ã¯ææžåãããŠããŸããã ãŸããman stringã¯ãBSDïŒããã³Mac OS XïŒã§ã®æååæäœæ©èœãææžåããstringïŒ3ïŒã®manããŒãžã瀺ããŠããŸãã
ç°¡åãèã éçºããŒãžã§ã³ã«ãããŸã-httpsïŒ//github.com/fish-shell/fish-shell/blob/master/doc_src/string.txtãåç §ããŠãã ãã
ïŒææžåãããŠããªãïŒæåååå²ãååã§ãªãçç±ã¯æããã§ã¯ãããŸããããããã¯åé¡ãããŸããã
ç§ã®åœåã®èãã¯ãããã¯äŸ¿å©ãªé¢æ°ãªã®ã§ããã®æäœã¯å®å
šã«ç°¡åã«ãªããšãããã®ã§ããã @ridiculousfishã®ææ¡ã«ãããããã¯ããã«äœãã«ãªããããçš®ã®ã¹ãã¢ã調æŽããŠããšã¯ã¹ããŒãæã«å€æ°ããã®æåã«çµåãããããã«ããŸãã string split
ã¯ãæååãåå²ããåãªãã³ãã³ãã§ããåºæ¬çã«ã¯ã cut
ã®ããŒãžã§ã³ã§ãã
ãããè¡ãæãèªç¶ãªæ¹æ³ã¯ãsetã³ãã³ãã®æ°ãããªãã·ã§ã³ã䜿çšããããšã§ãã
ç§ã¯ã»ãã³ãã£ã¯ã¹ã§å®å
šã«å£²ãããŠããããã§ã¯ãããŸããããããã¯å¥ã®ãªãã·ã§ã³ã§ãã äŸïŒ set -S ':' PYTHONPATH
ã ããã¯PYTHONPATHã空ã®ãªã¹ãã«èšå®ããŸããããããšãæ¢åã®PYTHONPATHãåå²ããã ãã§ããïŒ ãããŸã§ã®ãšããããã¹ãŠã®èšå®ãªãã·ã§ã³ã¯åè
ãå®è¡ããŠããããã set -S ':' PYTHONPATH $PYTHONPATH
ãå®è¡ããå¿
èŠããããŸãã ãŸãã¯ããããè¡ããªãããã«ããåãããŒã«å
ã§äžè²«æ§ãæããªãããã«ããŸãã
ã€ãŸãããšã¯ã¹ããŒããããç°å¢ã§ã¯$ PATHã®èŠçŽ ãã³ãã³ã§åºåãããŠããã®ã«ã
echo "PATH is $PATH"
ã®åºåã§ã¯ã¹ããŒã¹ã§åºåãããŠããã®ã¯ãªãã§ããã
ããã¯å®éã«ã¯è¯ã質åã§ãã ãã¡ãããåºåãæåãfor p in $PATH; echo $p; end
ã®ããã«è¡šç€ºãããããšã¯æåŸ
ã§ããŸããããå€æ°ããšã®åºåãæåãšçµåããã®ãæ£ããæ¹æ³ãããããŸããã ãã¡ãããæåã§è¡ãã«ã¯string join
ããããŸãã
ãã ãããã®åäœã¯é©ãã¹ããã®ã§ãã 100人ã«è€æ°ã®èŠçŽ ãæã€å€æ°ããšã¯ã¹ããŒããããšã©ããªãããå°ãããšããã®ãã¡ã®90人ã¯ãå€ãåºåãæåãšããŠã¹ããŒã¹ãšé£çµãããŠãããšèšãã§ãããã
調æ»ã«ããèšèšãšéã®äœæã«ã¯äžè¬çãªåé¡ããããŸãã 調æ»å¯Ÿè±¡ã®äººã ã¯é »ç¹ã«bashïŒããã³çšåºŠã¯äœããä»ã®POSIXyã·ã§ã«ïŒã®ç¥èãæã£ãŠããã®ã«å¯Ÿããéã®ã¢ã€ãã¢ãã®ãã®ã¯ãPOSIXã®å°ãªããšãäžéšãæŸæ£ããããšã«ãã£ãŠ_ããè¯ã_äœããããããšã§ãã
ãããå®å šã«ç¡äŸ¡å€ã§ãããšèšã£ãŠããããã§ã¯ãããŸãããããã¯èŠããŠããã¹ãããšã§ã-ç§ãã¡ããããã®çš®é¡ã®ã¢ã€ãã¢ã«åºå·ãããªãã°ãç§ãã¡ã¯bashã®èšèãåå²ããæ¯ãèããšif-fiãæã£ãŠããã§ãããã
set -S ':' PYTHONPATH
ã¯PYTHONPATHã空ã®ãªã¹ãã«èšå®ããŸããããããšãæ¢åã®PYTHONPATHãåå²ããã ãã§ããïŒ
空ã®ãªã¹ãã«èšå®ãããŸãã ãŠãŒã¶ãŒãæ¢åã®å€ãä¿æãããå Žåã¯ãæ瀺çã«å«ããå¿ èŠããããŸãïŒä»¥äžãåç §ïŒã
ãšã¯ã¹ããŒããŸãã¯è£éã®ããã«ç¹å®ã®å€æ°ã®é åèŠçŽ ãé£çµãããšãã«äœ¿çšãããæåïŒãŸãã¯ç©ºã®æååïŒãæ§æããæ段ãé€ããŠãå¿ èŠãªãã¹ãŠã®æ©èœããã§ã«ãããŸãã 誰ããPYTHONPATHã®ãããªå€æ°ãæäœãããå Žåã¯ããããåçŽãªæååãšããŠæ±ãããšãã§ããŸãã
set PYTHONPATH "/a/new/dir:$PYTHONPATH"
ãŸãã¯ãé åãšããŠæ±ãããšãã§ããŸãã
set -S ":" PYTHONPATH /a/new/dir (string split ":" $PYTHONPATH)
æååã«è£éãããšãã«ã¹ããŒã¹ã§ã¯ãªãåå²/é£çµæåã䜿çšãããšããç§ã®ææ¡ã¯ããŠãŒã¶ãŒãå€æ°ãé åã«åå²ãããã©ããã«é¢ä¿ãªããäžè²«ããåäœãæäŸããããšã«æ³šæããŠãã ããã
å§å¡äŒã«ããèšèšãææ¡ããŠããããã§ã¯ãããŸããã ãã®ããã«ãzshã®ãããªçæ°ãšããŽã·ãã£ããããŸãã ç§ã¯åã«ã2ã€ä»¥äžã®ãªãã·ã§ã³ãäžããããä»ã®çç±ããªãå Žåã¯ãã·ã§ã«ã®ãŠãŒã¶ãŒãæãé©ãããªããªãã·ã§ã³ãéžæããããšãæè¯ã®éžæã§ããããšãææããŠããŸãã ãŸããïŒä»ã®ãšããïŒèªååå²å€æ°ïŒãã¡ãããPATHãšCDPATH以å€ïŒãªã©ã®æ°ããã³ãã³ããåäœãå°å ¥ããããšã«å察ããŠããã®ããã®ããã§ãã ããã¯ããŸãã«ããå®è¡ãããªãçš®é¡ã®ããšã§ãããéåžžã¯config.fishãšãAnacondaã®ãã¢ã¯ãã£ãåãã¹ã¯ãªãããªã©ã®ããã€ãã®ç¹æ®ãªé¢æ°ã§ã®ã¿å®è¡ãããŸãã ãŸãããŠãŒã¶ãŒãconfig.fishã§varãé åã«æ¢ã«åå²ããŠãããã©ããã«é¢ä¿ãªããåŸè ãæ£ããåäœãããæ¹æ³ã¯ãåžžã«åå²ããå¿ èŠã®ããæååãšããŠæ±ãããšã§ãã ããšãã°ãPYTHONPATHãä¿®æ£ããå¿ èŠãããå Žåã¯ã次ã®ããã«ãªããŸãã
# Hypothetical snippet from the Anaconda activate script.
if test (count PYTHONPATH) -gt 1
set -S ':' PYTHONPATH /activated/python/tree $PYTHONPATH
else
set PYTHONPATH "/activated/python/tree:$PYTHONPATH"
end
ãŸãã¯ããã£ãšç°¡åã«èšãã°ã
# Hypothetical snippet from the Anaconda activate script.
set -S ':' PYTHONPATH /activated/python/tree (string split ':' $PYTHONPATH)
ã¯ããããã¯æœåšçã«åçŽãªæååã§ãã£ããããããªããã®ãé
åã«å€ããå¯èœæ§ããããŸãã ãããã -S
ã¹ã€ããã§æå®ãããæåã¯ããã®å€æãé
åã«ãšã¯ã¹ããŒãããã³è£éãããšãã«äœ¿çšããããšããç§ã®ã«ãŒã«ã§ã¯ãå®éã«ã¯éèŠã§ã¯ãããŸããã ãã ãã1ã€ã®ã³ãŒããŒã±ãŒã¹ããããŸãã ãŠãŒã¶ãŒãconfig.fishã§å€æ°ãé
åã«æ瀺çã«å€æããŠããããäžèšã®æ¶ç©ºã®ã¹ã¯ãªããã®ãããªãã®ãå®è¡ããå Žåã¯ã©ããªããŸããã varã¯æœåšçã«è€æ°èŠçŽ ã®é
åã«ãªããŸããã€ãŸããåŸã§
for elem in $PYTHONPATH
echo $elem
end
ããã¯ãä»®æ³ã®ãã¢ã¯ãã£ãåãã¹ã¯ãªããã«ãã£ãŠè¡ãããåå²ã«æ°ã¥ããªãã£ãããããŠãŒã¶ãŒãæåŸ ããããã«ãã³ãã³ã§åºåããããã£ã¬ã¯ããªã®åœ¢åŒã®å€ã§forã«ãŒãã®æ¬äœã1åã ãå®è¡ããããšã¯ãããŸããã ãŠãŒã¶ãŒããã®ãããªããšãããã®ã¯åä»ãªã®ã§ãç§ãã¡ã¯ããã§çããããšãã§ãããšæããŸãã
tl; drãªã¹ãã¯åºåãæåããèšæ¶ãããå¿ èŠããããšæããŸããã以äžããã®çç±ã§ãã
ç§ã¯äžèšã®ã»ãšãã©ã®å€ãã«åæããŸãã ãã ãããŸã é¢åã«æããã®ã¯ãäžèšã®ã³ãã³ãããŸã é床ã«åé·ã«èŠããããšã§ãã ã€ãŸãããããã®ã³ãã³ãã®äžéšãå¹³æãªè±èªã§èª¬æããæ¹ãç°¡åãªå ŽåããããŸãã
äŸãšããŠïŒãããŠç§ã¯ç¹°ãè¿ããããã®ã®æ°ã»ã©é·ãã«çŠç¹ãåãããŠããŸããïŒïŒ
set -S ':' PYTHONPATH /activated/python/tree (string split ':' $PYTHONPATH)
/activated/python/tree
ãPYTHONPATH
ã«è¿œå ïŒ :
-delimited`ïŒãããã«ã¯ã PYTHONPATH
ãšåºåãæå:
ã®2ã€ã®ç¹°ãè¿ãããããŸãã PYTHONPATH
ãç¹°ãè¿ãå¿
èŠããããšããããšã¯ã2ã€ã®çç±ã§ã»ãŒééããªãåé¡ãããŸããããŸããããã2ã€ã®çç±ã®ã©ã¡ããåºåãæåã«ã¯åœãŠã¯ãŸããŸããã
set PYTHONPATH /activated/python/tree $PYTHONPATH
ãšèšã£ããšãã«äœãèµ·ãã£ãŠããã®ããçŽæçã«ç解ããã®ã¯é£ãããããŸãããããã¯ãéåžžã«ããç¥ãããŠããæŠå¿µ/ã€ãã£ãªã ã§ããi = 2 + i
ã®ãããªãã®ãšéåžžã«äŒŒãŠããããã§ãã ïŒãã ãã +=
ã®ãããªã·ã§ãŒãã«ããã¯ãŸã ãããŸãããã®ããã以äžã«--append
ãã©ã°ãææ¡ããŸããïŒäžæ¹ããªã¹ããžã®è¿œå ã«ã€ããŠèãããšããåå²ã«ã€ããŠã¯èããŸãããåºåãæåã§åå ããŸãã 圌ãã¯ããªã¹ãå
šäœãä»ã®åœ¢åŒã«å€æããå®éã®æäœãå®è¡ããŠãå
ã«æ»ãããšãèããŠããŸããã 圌ãã®å¿ã®äžã§ã¯ã圌ãã¯åœç¶ãåºåãæåããå
éšããŸãã¯ãåªå
ãåºåãæåã«å€æŽããã®ã§ã¯ãªããåºåãæåãšããŠèªã¿ãŸããset
ã³ãã³ãã䜿çšãããšã2ã€ã®ç°ãªããªã¹ããçµåããããã®å¥ã®ã³ãã³ããè¿œå ããæéãçããŸãã äžæ¹ãããåºåãæåããå¥ã®åºåãæåãžã®å€æã¯ãäž»ã«äžèšã®çç±ã«ãããçæ³çã«ã¯ãŠãŒã¶ãŒã«æåã§è¡ãããããªããã®ã§ããå¯Ÿç §çã«ããªã¹ãã§åºåãæåãæå®ããå¥ã®æ¹æ³ãææ¡ããŸããããããªã¹ãã«ç¡æéã«é¢é£ä»ããŸãã ãããã£ãŠãäžèšã®äŸã¯æ¬¡ã®ããã«å®è¡ã§ããŸãã
# Changes the delimiter for this list. This might be done in some global config file for common lists as this one.
set -S ':' --no-modify PYTHONPATH
# or, workaround if you don't want to add extra options to set:
set -S ':' PYTHONPATH $PYTHONPATH
# The actual append operation
set --prepend PYTHONPATH /activated/python/tree
# or, workaround if you don't want to add extra options to set:
set PYTHONPATH /activated/python/tree $PYTHONPATH
å«æ/ãã©ããŒã¢ãã質å/ãªã©ïŒ
__fish_sep_PYTHONPATH
ãšããŠå¥ã®å€æ°ã䜿çšããŸãïŒ--no-modify
ãšåŒãã§ãããã©ã°ãè¿œå ããŸããããã¯ããªã¹ãã®å
容ãå€æŽããã«ãªã¹ãã®åºåãæåãå€æŽããããã«éã«æ瀺ããŸãã äžèšã®çç±ïŒ1ïŒã®ããã«ã --append
ïŒ$ãã©ã°ãš--prepend
ãã©ã°ãè¿œå ããå¯èœæ§ããããŸãã ãšã«ãããããã¯å¿
é ã§ã¯ãããŸãããäžèšã®åé¿çã瀺ãããã«ãä»æ¥ã®éã§è¿œå ãšè¿œå ãã©ã®ããã«è¡ããããã瀺ããŠããŸãã,
ãã:
ã«å€æŽããå Žåã ["0:1", "2"]
ã¯["0", "1,2"]
["0", "1", "2"]
ã«ãªãã¯ãã§ãïŒããããªã¹ãã®è£ã«ããæååãå€æŽããã«åºåãæåãå€æŽããã ãã§çºçããŸãïŒã ãã®åäœã¯ãçŸåšã®åäœãšã®äºææ§ãšãçŸåšããã©ã«ãã®äžå€ã®åºåãæåããããšããäºå®ãæ倧åããå¿
èŠããããŸããçµè«ã¯æ¬¡ã®ãšããã§ãã
set --no-modify -S : PYTHONPATH
set --prepend PYTHONPATH /activated/python/tree
@szhu ãç§ã®ææ¡ã«é¢ãã詳现ãªã³ã¡ã³ããããããšãã ãã ããææ¡ããããœãªã¥ãŒã·ã§ã³ã«ã¯å€ãã®åé¡ããããŸãã ããšãã°ã -no-modifyãªãã·ã§ã³ãè¿œå ãããšãå®éã«ã¯å€æ°ããªã¹ãã«å€æãããŠå€æŽãããå€æ°ãå€æŽãããŸãã ç§ã¯ããªãã®ææ¡ã®ã»ãšãã©ãã¹ãŠã®èŠçŽ ãæåŠããŸãããããã¯ç§ã«ããªãã®ãã€ã³ãã®ãã¹ãŠã§ã¯ãªãã«ããŠãã»ãšãã©ã«å¯ŸåŠããããç°¡åãªè§£æ±ºçã«ã€ããŠèããããŸããã ãããããç¹å®ã®env varãåžžã«èªåçã«åå²ãããç¹å®ã®ããŒã¯ã³ïŒããšãã°ããïŒããŸãã¯ããïŒã§åæ§æãããå¿ èŠãããããšãéã«äŒããã¡ã«ããºã ãå¿ èŠã§ãã ããã¯èªåé åæå®ãšåŒã°ããå Žåããããå®è¡ããããšãæ¢åã®å€ããŸã é åã§ãªãå Žåã¯ããã«åå²ãããŸãã
ãã®åäœãã¢ã¯ãã£ãã«ããããã«ãæ°ãããªãã·ã§ã³ãsetã³ãã³ãã«è¿œå ã§ããŸãã ãã ããããããããšã¯ãããŸãã§ãããå€ã®ãªãå€æ°ãå®çŸ©ãããã®ãšããŠè§£éãããå¯èœæ§ãããããšãæžå¿µããŠããŸãã setã³ãã³ãã«-AããŒã¯ã³ãªãã·ã§ã³ãè¿œå ããããšã¯æ確ã§ããïŒ äŸãã°ïŒ
set -x -A ':' PYTHONPATH
ãããããã³ãã³ã§åå²ãããåŸãæ¢åã®PYTHONPATH envvarãããã«é åã«å€æããŸãã éã«ãæååã«ãšã¯ã¹ããŒããŸãã¯è£éããããšãå€ãã³ãã³ã«é£çµãããŸãã åæ§ã«ãã³ãã³ãã®å®è¡æã«PYTHONPATHãååšããªãã£ãå Žåã§ããèªåé åã®æå®ãèšæ¶ããããã®åŸã®äœ¿çšã«åœ±é¿ããŸãã ããšãã°ãããã¯æããã«é åãäœæããŸãã
set PYTHONPATH /a/path /b/path /c:/d/path
ãããããã®æåŸã®è°è«ã¯ã©ãã§ããïŒ èªåçã«2ã€ã®ããŒã¯ã³ã«åå²ããå¿ èŠããããŸããïŒ
ãã®åäœã¯ãšã¯ã¹ããŒããããå€æ°ã«ã®ã¿é©çšãããå¿ èŠããããããã§ãªãå Žåã¯ãšã©ãŒãçºçããããšã«æ³šæããŠãã ããã 綎ããå¿ èŠãªããã€ãã®ã³ãŒããŒã±ãŒã¹ããããŸãã ããšãã°ãå ã®èªååå²å®£èšã«æ¬¡ã®äŸã®ãããªå€ãå«ãŸããŠããå Žåã¯ã©ããªããŸããã
set -x -A ':' PYTHONPATH 'hello:goodbye' $PYTHONPATH
ãããã®å€ã¯èªååå²ããŒã¯ã³ã§åå²ããå¿ èŠããããŸããïŒ ãŸãã¯ããšã©ãŒãçºçããå€ã®å€æŽãå¥ã®ã¹ããŒãã¡ã³ãã§è¡ãå¿ èŠããããŸããïŒ ãŸããã©ã¡ãã®æ§æãéžæããŠããèªååå²ããŒã¯ã³ãå«ãå€ãã©ãããããšããåé¡ããããŸãã æªéã¯çŽ°éšã«å®¿ã£ãŠããŸãã ã€ãŸããç§ãèããŠããªãã£ããã®ææ¡ã®ä»ã®åœ±é¿ããããããããªããšããããšã§ãã ããåé·ãªæ§æã䜿çšããç§ã®å ã®ææ¡ã¯ãç§ãç¥ãéãããããã®åé¡ãåé¿ããŸãã
@ krader1961 ããåçããããšãããããŸãã ããããããªãã¯ç§ãå€æ°ãæååãããªã¹ãã«å€æããŠãããšæã£ãŠããããã§ãã ããªãã¯éã®éèŠãªæŠå¿µã®1ã€ã誀解ããŠãããšæããŸãããã¹ãŠã®å€æ°ã¯æååã®ãªã¹ãã§ãã æååã®ããã«èŠããå€æ°ã¯ãå®éã«ã¯é·ã1ã®ãªã¹ãã§ããéã¯ããããé·ã0ãŸãã¯2ãŸãã¯ãã®ä»ã®é·ãã®ãªã¹ããšåãããã«æ±ããŸãã
ãŸããåºåãæåãå€æŽãããšãç°å¢å€æ°ã®åãæž¡ãã«äœ¿çšãããåºã«ãªãæååãå€ããå¯èœæ§ããããŸãããéã®åŒ·ã¿ã®1ã€ã¯ããŠãŒã¶ãŒãéåžžãåºåãæåã«ã€ããŠãŸã£ããèããå¿
èŠããªãããšã§ãã ãããã -S
ãªãã·ã§ã³ã§ããã®ãªã¹ããéã®å€ã«ãšã¯ã¹ããŒããããšãã«æååã«å€æããæ¹æ³ãæå®ããããšããå§ãããçç±ã§ãã -S
ã¯ãéå
ãªã¹ãã®è¡šçŸãå€æŽããªãã§ãã ããïŒã¿ãŒã²ããåºåãæåã䜿çšããŠãã®ãªã¹ããè¡šçŸã§ããªãå Žåãé€ãïŒã
ã¡ãªã¿ã«ããããç§ã®ææ¡ãã©ãã»ã©ããããã瀺ãäžäŸã§ãã å€æ°$L
ãããã©ã«ãã®åºåãæå\x1e
ã«æ»ãããã®ã³ãŒãã次ã«ç€ºããŸãã ä»æ¥ã®éã§äœæã§ããå€æ°ïŒã¹ã³ãŒããã¢ã€ãã æ°ïŒã«ã¯ãŸã£ãã圱é¿ããŸããã
set -S \x1e L $L
ãã1ã€ãåŒæ°ã®--no-modify
ãã¡ããªãŒã¯åãªãã·ã§ãŒãã«ããã§ãã åçã®ãã®ã¯æ¬¡ã®ãšããã§ãã
| ã·ã§ãŒãã«ãã| åç|
| --- | --- |
| set [other args] --no-modify L
| set [other args] L $L
|
| set [other args] --prepend L $TOADD...
| set [other args] L $TOADD... $L
|
| set [other args] --append L $TOADD...
| set [other args] L $L $TOADD...
|
ïŒåã«æ¬¡ã®ããã«è¿°ã¹ãŸããããä»ã¯ãã£ãšããŸã説æã§ãããšæããŸããïŒãããã®3ã€ã®è°è«ãããã«ã銬鹿ããŠããããã匷調ããããšã§ãããããå¿
èŠãã©ããçåã«æã人ããããããããŸããã éã«ã¯çŽäº€æ§ã®èšèšåçããããšèšã人ããããããããŸããã ãã¹ãŠãçŽäº€ããŠããå Žåãããã¯ãå®è¡ããã倧ããªã¿ã¹ã¯ã«ã€ããŠããã®ã¿ã¹ã¯ãå®è¡ããããã«éžæããæ©èœã®ã»ãããæ確ã§ããå¿
èŠãããããšãæå³ããŸãããããå®è¡ããæ£ããæ¹æ³ã¯1ã€ã ãã§ããå¿
èŠããããŸãã ããã§ããªã¹ãã«å€æŽãè¿œå /è¿œå /é²æ¢ããå¥ã®æ¹æ³ãå®éã«è¿œå ããŸãããããã¯ã眮ãæããããåçã®ãã®ãäžå¿
èŠã«åé·ã§ãããšæãããã§ãã å€æŽãªã¹ããè¿œå ããæ£ããæ¹æ³ã§ã¯ãããŸããã ãããèªåã«çŽåŸããã1ã€ã®æ¹æ³ã¯ããªã¹ããžã®è¿œå ã«ã€ããŠã©ã®ããã«èããããèããããšã§ãã ã $L
ã$L
$TOADD
ã«èšå®ãããã§ã¯ãªããã $TOADD
ã$L
ã«è¿œå ããããšæããããããŸããã
ããªãã®èããæããŠãã ããããããŠãããç§ã®ææ¡ã«å¯ŸããŠãã説åŸåã®ããã±ãŒã¹ã«ãªããã©ããã ïŒãŸããç§ãç©äºã誀解ããããšã¯ããªãäžè¬çã§ãã®ã§ãé æ ®ãªãç§ãèšæ£ããŠãã ãããïŒ
@szhuç§ã¯ãéã®ãã¹ãŠã®å€æ°ã0ã1ããŸãã¯ãã以äžã®å€ã®ãªã¹ãã§ããããšãããç¥ã£ãŠããŸãã ãŸããé¢é£ããåºåãæåãå éšè¡šçŸããå€ããŠãããŒãµã«ããŒã¿ã¹ãã¢ã«ä¿æãããæ¹æ³ïŒåºåãæåã®ä¿å以å€ïŒã«åœ±é¿ãäžããŠã¯ãªããªãããšãæ確ã«è¿°ã¹ãŠãã以åã®ã³ã¡ã³ããèªãã§ããªãããã§ãã ããªãã¯ç§ã®åã®ãã€ã³ãã«ãèšåããŸããã§ããã æåŸã®äŸãèããŠã¿ãŸãããã
set -S \x1e L $L
Lã«ãã§ã«2ã€ä»¥äžã®å€ãå«ãŸããŠããå Žåã¯ãã©ãããã°ããã§ããïŒ ãããããé¢é£ããåºåãæåãå€æŽãã以å€ã«äœããããŸããã ãã®å Žåã $ LåŒæ°ã¯ãªãã·ã§ã³ã§ããããïŒ ãŸãã¯ãæåã«æ¢åã®é åãåçŽãªæååã«å€æãïŒãããããæ¢åã®åºåãæåã䜿çšããŠé£çµããŸãïŒã次ã«ãã®æååãæ°ããåºåãæåã§åå²ããå¿ èŠããããŸããïŒ åã«ãèšã£ãããã«ãæªéã¯çŽ°éšã«å®¿ã£ãŠããŸãã
æçµçã«ã確ç«ãããèšèšè
ãšä¿å®æ
åœè
ã¯ã --no-modify
ãã¡ããªãŒã®é¢æ°ãè¿œå ãããã©ããã決å®ããŸãããã³ã¹ãã«æ¯ã¹ãŠååãªäŸ¡å€ããªããããç§ã¯å察祚ãæããŸãã
ç³ãèš³ãããŸãããããã®ã¹ã¬ããã¯é·ãã§ããäžèšã®æ¿èªãéããã«éããããŸããã åãããŒãžã«ããããšãç¥ã£ãŠãããšããã§ãããã äžèšã®æžå¿µäºé ã®ã»ãšãã©ã«ã察åŠãããšæããŸããããã¹ãŠã§ã¯ãããŸããã 以äžã§ã¯ãããããã®æžå¿µäºé ã«ã€ããŠå ·äœçã«èª¬æããŸãã
set -S \x1e L $L
ã®$L
ãªãã·ã§ã³ã§ããïŒset
ã®æ¢åã®åäœã¯å€æŽãããŸããã çŸåšã®åäœã§ã¯ã set L $L
ã¯L
ãå€æŽããã set L
ã¯L
ã空ã®ãªã¹ãã«ããŸãã set -S \x1e L $L
ããã³set -S \x1e L
ãšåãã§ãã
1.1 set -S \x1e L $L
ã¯ãåºåãæåãå€æŽããã ãã§ã¯åé·ã«èŠããŸãããïŒ
å°ãã ãã®ããããã®ã·ã§ãŒãã«ãããšããŠ--no-modify
ãªãã·ã§ã³ãææ¡ããŸãã
ãããããã®ã·ã§ãŒãã«ãããååšããªããŠããç§ã®èšç»ã¯åŽ©å£ããŸããã ãªã¹ããè¿œå ãããšããç§ãã¡ã¯ãã§ã«ãã®åé¡ã«æ¯æ¥å¯ŸåŠããŠããŸãïŒ set PATH ~/.bin $PATH
ã ãã®ãããåãçç±ã§ã --prepend
ãš--append
ãææ¡ããŸãã
å€ãåºåãæåã\x1e
ã§ãæ°ããåºåãæåã$ :
ã§ãããéã®ãªã¹ã["hello", "world"]
ïŒ hello\x1eworld
ãšããŠãšã¯ã¹ããŒãïŒããããšããŸãã å€æãè¡ãããã®2ã€ã®åºæ¬çãªæ¹æ³ããããŸãïŒãå€æãªãã·ã§ã³ãïŒïŒ
["hello", "world"]
ã䜿çšããŠã ["hello", "world"]
ã«å€æããŸãïŒ hello,world
ãšããŠãšã¯ã¹ããŒããããŸãïŒhello\x1eworld
ã䜿çšããŠã ["hello\x1eworld"]
ã«å€æããŸãïŒ hello\x1eworld
ãšããŠãšã¯ã¹ããŒããããŸãïŒããã¯ãå®è£ ã®èŠ³ç¹ã§ã¯ãªããUIã®èŠ³ç¹ããã®ãã®ã§ããããšã«æ³šæããŠãã ããã ç§ãã¡ã¯ããããŠãŒã¶ãŒã«ã©ã®ããã«èŠãããã«ã€ããŠè©±ããŠããã 次ã®è³ªåã§å®è£ ã«ã€ããŠèª¬æããŸãã _泚ïŒãã®åçã®æ®ãã®éšåã¯ãããªãã®è³ªåã«ä¿ãããŠãç§ãäžã§åãäžããŠããªãæ°ãããã®ã§ãã ããããšãïŒ_
éã®äžã ãŸããç§ãã¡ãå®å šã«éã§äœæ¥ããŠããå Žåããªã¹ãã¯äžæµã§ãããåºåãæåã«ã€ããŠå¿é ããå¿ èŠã¯ãªãã®ã§ãã©ã¡ããå¿ èŠãããŸããã ïŒç¹°ãè¿ããŸãããããã¹ããã¯ãŠãŒã¶ãŒã®èŠ³ç¹ããã§ããéçºè ãšããŠããããå®çŸããã®ã¯ç§ãã¡ã®è²¬ä»»ã§ããïŒ
å€æ°ã®ãšã¯ã¹ããŒã圢åŒãå€æŽããŸãã ãããã£ãŠããŠãŒã¶ãŒãåºåãæåãå€æŽããå¿ èŠãããå¯äžã®çç±ã¯ãç°å¢å€æ°ãèªã¿åãããã°ã©ã ã®ãšã¯ã¹ããŒããããæååãå€æŽããããšã§ãã éã§äœæããããªã¹ãã®å Žåããªã¹ããšããŠã®å€æ°ã®æå³ãéèŠã§æ確ã«å®çŸ©ãããŠãããããå€æãªãã·ã§ã³1ãå¿ ã䜿çšããŸãããããã£ãŠããªã¹ãè¡šçŸãä¿æããå¿ èŠããããŸãã
varsã®ã€ã³ããŒã圢åŒãå€æŽããŸãã ãã ããæåã«éã®å€éšã§äœæãããPATH
ã®ãããªç°å¢å€æ°ã®å Žåãæ¢ã«åºåãæåãå«ãŸããŠãããªã¹ãã®å Žåããã®åºåãæåãäœã§ããããéã«äŒããå¿
èŠããããŸãã ãã®ããã«ãå€æãªãã·ã§ã³2ã䜿çšã§ããŸãã
2.1ããã¯ã©ã®ããã«å®è£ ãããŸããïŒ
Fishã¯ããŠãŒã¶ãŒããããç¥ãå¿
èŠã¯ãããŸããããå®éã«ã¯ãªã¹ããæååãšããŠæ ŒçŽããŸãã å€æ°x
ã¯hello\x1eworld
ãšããŠæ ŒçŽãããŸãã ç§ã®ææ¡ã§ã¯ãå€æ°x
ã®åºåãæåãæå®ããå¥ã®å€æ°__fish_delimiter_x
ããããŸãã çŸåšã¯ååšããªããããããã©ã«ãã®åºåãæå\x1e
ã䜿çšããŸãã
å€æãªãã·ã§ã³1ã®å ŽåïŒ
__fish_delimiter_x
ã«ä¿åããŸããå€æãªãã·ã§ã³1ã®å Žåãåçã®å®è£ ïŒ
__fish_delimiter_x
ã«ä¿åããŸããå€æãªãã·ã§ã³2ã®å ŽåïŒ
__fish_delimiter_x
ã«ä¿åããŸãã2.2äž¡æ¹ã®å€æãªãã·ã§ã³ãå¿ èŠãªå ŽåããŠãŒã¶ãŒã¯ã©ã¡ãã䜿çšããããã©ã®ããã«æå®ããŸããïŒ
ããããã2ã€ã®ãªãã·ã§ã³ããããŸãããªãã·ã§ã³1ã®å Žå-D
ãŸãã¯--convert-delimiter
ããªãã·ã§ã³2ã®å Žå-d
ãŸãã¯--set-delimiter
ã§ãã
2.3æ¬åœã«äž¡æ¹ã®ãªãã·ã§ã³ãå¿ èŠã§ããïŒ
çŸåšã®éã®äžã§ã¯ãéã®å€ã®éçã§ã¯\x1e
ã¯èŠãããªããšä»®å®ããããšãéžæããŸãã ãããããã©ã«ãã®åºåãæåãšããŠä¿æãããã®ä»®å®ãç¶æããå Žåãå€æãªãã·ã§ã³1ã¯åºåãæåã®å€æãšèšå®ã®äž¡æ¹ã«ååã§ãããå€æãªãã·ã§ã³2ã¯å¿
èŠãããŸããã ïŒããã確信ããç°¡åãªæ¹æ³ã¯ãä»®å®ãçã®å Žåãå€éšã§äœæããããªã¹ããå€æãããšãã«ãå€æãªãã·ã§ã³1ã®ã¹ããããå€ãåºåãæåã®ãã¹ãŠã®åºçŸç®æãæ°ããåºåãæåã«çœ®ãæãããã¯äœãè¡ãããå€æå
šäœãæžå°ããããšãç解ããããšã§ããå€æãªãã·ã§ã³2ãžãïŒ
@ridiculousfish ãç¹ã«UIãšå®è£ ã®è©³çŽ°ã«é¢ããŠãããã«ã€ããŠããã£ãŒãããã¯ãããã ããã°å¹žãã§ãã ããããšãïŒ
ããã«ã¯2ã€ã®åé¡ãããããã§ãã æåã®ãã®ã«ã€ããŠè©±ããŸãããã
çã®é åã®å Žåã¯+1
ãã®ã»ãã¬ãŒã¿ãŒããªãã¯ã¯æ¬åœã«éã«å¿ èŠã§ããïŒ PingïŒ627
å€æ°å€ã®æååè¡šçŸãé
åã«å€æããããã®äºææ§ã®ãªã2ã€ã®æ¹æ³ãããããšã«æ°ä»ãããåé¡ïŒ2106ã®ä¿®æ£ã«ç
§ãããŠãããåæ€èšããŸãã ãã®ãã¡ã®1ã€ã¯ã空ã®èŠçŽ ã誀ã£ãŠåé€ããŸããã äžå¿çãªåé¡ã¯ã class env_var_t
ãwcstringã®ãã¯ãã«ã§ã¯ãªãã wcstring
ã«åºã¥ããŠããããšã§ãã ãããå€ãã䟡å€ããããã©ããã¯è°è«ã®äœå°ããããŸãã
ãã®åé¡ããã©ããŒããŠããå Žåã¯ãPRïŒ4082ã確èªãããããããã¹ãããããšããå§ãããŸãã ããã«å¯ŸåŠããæåã®æ¹æ³ã¯ãzshã®åãååã®æ©èœã«äŒŒããçµã³ä»ãããããå€æ°ã§ãããšå€æããŸããã
ãããã®ã³ãã³ã§ãšã¯ã¹ããŒãããããªã¹ããåãå·»ã質åãšããã®ãã¯ã€ããªã¹ãã«å«ããã¹ãenvvarsã¯ããŸã 決å®ãããŠããªãããã§ãã ãã®ä»¶ã®çŸç¶ã¯ã©ããªã£ãŠããŸããïŒ ãã®ãããã¯ã®æçµçãªè§£æ±ºçãæåŸ ã§ããŸããïŒ ã¡ããã©ä»æ¥ãLD_LIBRARY_PATHããã¯ã€ããªã¹ãã«ãªããšããçœ ã«åã³ééããŸãã...
èŠçŽãããšãUnixç°å¢å€æ°ã¯æååã§ãããããé åã®ãããªenvå€æ°ã¯åºåãæåã䜿çšããå¿ èŠããããŸãã ã»ãšãã©ã®å Žåãã³ãã³ïŒ$ PATHïŒã䜿çšããŸãã ãã¹ãŠãããããããã§ã¯ãããŸãããïŒ$ LESSïŒã ã€ã³ããŒã/ãšã¯ã¹ããŒãã®ãã¹ãŠã®é åãåºåãããã«ã³ãã³ã䜿çšããããšæããŸãïŒå®éãéã¯ãã®ããã«æ©èœããŠããŸããïŒã åé¡ã¯ãäžéšã®ãã©ããå€æ°ã«ã³ãã³ïŒ$ DISPLAYã$ SSH_CONNECTIONïŒãå«ãŸããŠããããšã§ãã
ç®æšã¯ãåºåãããå€æ°ãéã®é
åãµããŒãã§èªç¶ã«æ©èœãããããšã§ãã @szhuã¯ãåºåãæåã远跡ããããã«set
ãæ¡åŒµããããšãææ¡ããŸãããã$ïŒ$ set
$ïŒ$ãæ¡åŒµããIMOã¯ããããæ·»ä»ããã®ã«ééã£ãå Žæã§ãã
--no-modify
ã®åæ©ä»ãïŒã--no-modify
ã«ã€ããŠãæããå¿
èŠããããŸããã¬ãã¥ãŒã§ã¯ã @ fahoã®splitenvã®ã¢ã€ãã¢ãæ¯æããŸãã splitenv name
ã¯ãæ¢åã®å€æ°ãã³ãã³ã§åå²ããŸããããã ãã§ãã çŽ æŽãããã·ã³ãã«ã§ãã ã³ãã³ã䜿çšããªãå€æ°ã¯éåžžã«ãŸãã§ãããããç¹å¥ãªãµããŒãã¯å¿
èŠãããŸããã
æ¬ ç¹ã¯ãéããšã¯ã¹ããŒãããé åãã³ãã³ã§åºåãããæååãšããŠåã€ã³ããŒããããããšã§ãã å®éã«ã¯ãããã¯ãŸãã ãšæããŸãã
åé¿ã§ããã®ã§ããã°ããã®splitenv
ã®è€éãããŠãŒã¶ãŒã«è² ãããã¹ãã§ã¯ãããŸããã ãããã£ãŠãããã«äžæ©é²ãã§ãã³ãã³ã®ãã¯ã€ããªã¹ãããååãPATHã§çµãããã¹ãŠã®ç°å¢å€æ°ïŒ LD_LIBRARY_PATHãPYTHONPATHãªã©ïŒã«å±éããŸããå®éã«ã¯ãããã¯ã»ãŒåžžã«æ£ããããšãè¡ãã¯ãã§ãã åãŸãã人ã¯èª°ã§ãstring join
ã䜿ã£ãŠå€ãä¿®æ£ã§ããŸãã
ã ããç§ãææ¡ãããã®ïŒæ¬åœã«fahoã®ææ¡ïŒïŒ
splitenv
é¢æ°ãå®è£
ããŸãã ããã¯éã®ã¹ã¯ãªããã§æžãããšãã§ããŸããããã«ãããã³ãã³ã§åºåãããé åã«é¢é£ããã»ãšãã©ã®åé¡ã«ãæå°éã®äºææ§ã®ããæ¹æ³ã§å¯ŸåŠã§ãããšæããŸãã
splitenvã®ã¢ã€ãã¢ã«é¢ããŠïŒ
ããšãã°ã ["item1", "item:2"]
ã®ããã«ãã¢ã€ãã ã«ã³ãã³ãå«ãŸããŠãããªã¹ããéã«ãšã¯ã¹ããŒãããããšããŸãã ïŒç¹ã«é
åã䜿çšããŠãŠãŒã¶ãŒå
¥åãæ ŒçŽããå Žåãããã¯ãŸããªããšã§ã¯ãªããšæããŸããïŒ
ãªã¹ãã¯item1:item:2
ãšããŠãšã¯ã¹ããŒããããŸããïŒ ãã®å Žåããšã¯ã¹ããŒãåŸã«å
ã®ãªã¹ããåäœæããããšã¯ã§ããŸããã
ãŸããå€æ°ã®äžå€ã®ãã¯ã€ããªã¹ããæã€ããšã¯ééã£ãŠãããšæããŸããããã¯ã€ããªã¹ãã*?PATH
ã«ããããšã¯ããã»ã©ééã£ãŠãããšã¯æããŸããã ïŒããããåºåãæåãå€æ°ãšããŠæ ŒçŽãããšããç§ã®ææ¡ã®ãã1ã€ã®çç±ã§ããããã¯ã€ããªã¹ãã¯ãå€æ°ãèšå®ããããšã§å€æŽã§ããŸããïŒ
@szhuãã®éãã§ãã Exported-lists-can't-contain-colonsã¯ãUnixããã§ã«èŠããã§ããåé¡ã§ãã
ä»¥æ¥ \
ã ããç§ã¯éã«åãå¶éãå°å ¥ããããšã«ã€ããŠããã»ã©æªãã¯æããŸããïŒãšã¯ã¹ããŒããããå€æ°ã®ã¿ïŒã
ãŸãããã®åé¡ã¯ãé åãååž°çã«åŒã³åºãããfishã€ã³ã¹ã¿ã³ã¹ã«ãšã¯ã¹ããŒãããå Žåã«ã®ã¿çºçããŸãããããã¯ãŸãã ãšæããŸãã ãããäžè¬çã§ããããšãå€æããå Žåã¯ããµã€ãã«ãŒããŒã¿ãå¥ã®å€æ°ã«ã¢ã¿ããããããéãååž°çã«åŒã³åºããšãã«å¥ã®é ååºåãæåã䜿çšããããšãã§ããŸãã ç§ã®æšæž¬ã§ã¯ãããã»ã©é ããŸã§è¡ãå¿ èŠã¯ãªãã§ãããã
ææ¡ãããŸããããªããšãããšããžã±ãŒã¹ã¯ããŸãäžè¬çã§ã¯ãªãããšã«åæããŸããã人ã ãããã«ééããå Žåãããã¯æ¬åœã«æªãããšã«ãªãã®ã§ã¯ãªãããšå¿é ããŠããŸãã
éšåçã«ããäœæãããŠããªãäŸã次ã«ç€ºããŸãã
set -x TEST color:red
set -x TEST2 color:red font:serif
set -x TEST_PATH color:red
set -x TEST2_PATH color:red font:serif
exec fish
echo $TEST #=> color:red
echo $TEST2 #=> color:red:font:serif
echo $TEST_PATH #=> color red
echo $TEST2_PATH #=> color red font serif
äžèšãèŠãŠãå€ãã®æ°èŠãŠãŒã¶ãŒãæ··ä¹±ããŠããããšãæ³åã§ããŸãã
次ã®åäœã®æ¹ãã¯ããã«å¿«é©ã ãšæããŸãã
set -x TEST color:red
set -x TEST2 color:red font:serif
set -x TEST_PATH color:red
set -x TEST2_PATH color:red font:serif
exec fish
echo $TEST # color:red
echo $TEST2 # color:red font:serif
echo $TEST_PATH #=> color:red
echo $TEST2_PATH #=> color:red font:serif
ããã«ã€ããŠããªããšã³ãã¥ããã£ã®èãããé¡ãããŸãã
æ¢åã®ã³ãã³ãè±åºããŠã¿ãŸãããïŒ ããã¯åºå¥ãç¶æããã§ãããã
ãšã¹ã±ãŒãã¯ç§ã«ã¯çã«ããªã£ãŠããŸãã
å€æ°ãé åã§ãããã©ãããèšæ¶ãããªãããšã¯ããŸã æ··ä¹±ããå¯èœæ§ããããŸããïŒ
set -x TEST2 color:red font:serif
set -x TEST2_PATH color:red font:serif
exec fish
echo $TEST2 # color\:red:font\:serif
echo $TEST2_PATH #=> color:red font:serif
ã¯ãã ç§ã®ä»®èª¬ã¯ããã¹ãªã¹ãã®å€ã§ã¯ãé åã®ãšã¯ã¹ããŒãã¯äžè¬çã§ã¯ãªããšããããšã§ãã
MANPATHã¯ãäºéã³ãã³ïŒïŒ:ïŒã«å¯ŸããŠç¹å¥ãªæå³ãæã£ãŠããŸã-ïŒ2090ãåç §ããŠãã ãã-ããã¯ãäœåã«ã¹ãããæããŸããïŒ
ãŸãããµã€ãã«ãŒå€æ°FISH_ARRAY_VARIABLES=FOO\t:\nBAR\t;\nBAZ\t-\n
ã䜿çšããããšã¯ãä»ã®ããã»ã¹ã劚害ããããšãªãããŸããç§ãã¡ã¯ä»éãå·»ã蟌ãããã§ãã«ãŒã
åïŒ https ïŒ//github.com/fish-shell/fish-shell/issues/436#issuecomment -392409659 @zanchey
ïŒ2090ã®è©³çŽ°ã¯èªãã§ããŸããããã³ãã³ã§åºåãããæåå圢åŒãšé
å圢åŒã®éã®å€æã¯å®å
šã«ã·ãŒã ã¬ã¹ã§ãããšæããŸãïŒã³ãã³ãé
åé
ç®ã«è¡šç€ºãããªãå Žåãé€ãïŒã
MANPATH
ã«ããã«ã³ãã³ãå«ããã«ã¯ãããã«ã³ãã³ã衚瀺ãããå Žæã«ç©ºã®æååãè¿œå ããã ãã§ãã
$ set -x MANPATH 1 2 '' 3
# Check if it's set
$ bash -c 'echo $MANPATH'
1:2::3
MANPATH
ãã³ãã³ã§éå§ããã«ã¯ãå
é ã«ç©ºã®æååé
ç®ãè¿œå ããã ãã§ãã
$ set -x MANPATH '' 1 2 3
# Check if it's set
$ bash -c 'echo $MANPATH'
:1:2:3
ããã§ã¯ãã¹ãŠããã©ããŒããŠããããã§ã¯ãããŸãããããŠãŒã¶ãŒãšããŠãæ§æãªãããæå±ããããšæããŸãã
set -S
ãšsplitenv
ã¯æ§æã®åœ¢åŒã ãšæããŸãã äžéšã®ãŠãŒã¶ãŒã¯ãfish.configã§ããããå®è¡ããPYTHONPATHãé
åãšããŠåŠçããŸãã ä»ã®äººã¯ãPYTHONPATHãåäžã®ã³ãã³ã§åºåãããåèªãšããŠåŠçããŸããã ã¹ã¿ãã¯ãªãŒããŒãããŒã®ã¢ããã€ã¹ãã³ããŒããŠè²Œãä»ãããããããŠãŒã¶ãŒããå¥ã®ãŠãŒã¶ãŒã«PYTHONPATHãæäœããã¹ã¯ãªãããå®è¡ããããããšãåžžã«æ©èœãããšã¯éããŸãã...
ä¿®æ£ãããã PATH
ã§çµããå Žåãã®ã«ãŒã«ã¯æ§æãäžèŠã§ãïŒ+ 1ïŒãååŸã§ããéãå®ç§ã«èãããŸãã
ïŒåŸæ¹äºææ§ã®äŸ¡å€ããããã©ããã«ã€ããŠã¯æèŠããããŸããïŒ
ã¯ãã set -x TEST2_PATH color:red font:serif
ã¯color red font serif
é
åãšããŠã€ã³ããŒããããŸãããããã¯å€æ°ã®ãšã¯ã¹ããŒãã«é¢ããåŠçã§ãã ãšã¯ã¹ããŒããããå€æ°ãå®éã«é
åã«èšå®ããã«ã¯ããã®åäœãç解ããå¿
èŠããããŸãã
ã¯ãã ç§ã®ä»®èª¬ã¯ããã¹ãªã¹ãã®å€ã§ã¯ãé åã®ãšã¯ã¹ããŒãã¯äžè¬çã§ã¯ãªããšããããšã§ãã
@ridiculousfishã¯çŸåšã®è²æ®»ã«åœãŠã¯ãŸããããããŸããããéã®çœåŒåãå¢ãã«ã€ããŠããŠãŒã¶ãŒã¯éã®èœåãå©çšããŠåéã®è²æ®»ã«ãªã¹ããéä¿¡ããããšæããããããŸããã éã®ã»ãã·ã§ã³ã®ç¶æ ã管çããããã°ã©ã /ãã©ã°ã€ã³ãæçµçã«ååšããå¯èœæ§ãããïŒãããæ¬åœãã©ããã確èªããããã«æ°å¹ŽåŸã«ãã®ã³ã¡ã³ãããã§ãã¯ããŸãïŒããªã¹ããæ®éçã«èªåãã³ãŒã/ã·ãªã¢ã«åã§ããããã«ãªããšæ³åã§ããŸããã®ã³ãŒããããã¯ãªãŒã³ã«ããåé¿çãæžãããŸã-yã
䌌ãŠãããå°ãç°ãªãèãã®ãããªãã®ã§ãã PATH
ãç¹æ®ãªã±ãŒã¹ãšããŠæ±ãããšã¯ããŠãŒã¶ãŒãã·ã§ã«ã®å
žåçãªãŠãŒã¹ã±ãŒã¹ã®å±¥æŽãæã£ãŠããå Žåã«ã®ã¿ç解ã§ããæ代é¯èª€çãªãšããžã±ãŒã¹ã§ãã ããã«ãããäžè¬çãªã¹ã¯ãªããèšèªãšããŠäœ¿çšãããéã®èœåãå¶éãããå°æ¥ã®æœåšçãªãŠãŒã¹ã±ãŒã¹ãå¶éãããŸãã
@ridiculousfishèãããã解決çã®1ã€ã¯ãåç°å¢å€æ°/é
åãç¬èªã®ã»ãã¬ãŒã¿ãŒã«é¢é£ä»ããããšã ãšæããŸãïŒãããŠãããã©ã«ããšããŠ'\x1e'
ãŸãã¯' '
ãŸãã¯':'
ãä¿æã§ããŸãïŒããŸããç°å¢å€æ°ãäœæãããŠãŒã¶ãŒã¯ã競åãåé¿ããããã«é©åãªã»ãã¬ãŒã¿ãŒãéžæãã責任ããããŸãã ã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãïŒ set --separator ':' TMP 1 2 3
ã ãããã£ãŠããããã®ããç¥ãããç°å¢å€æ°ã®å ŽåããŠãŒã¶ãŒã¯å¯Ÿå¿ããããç¥ãããã»ãã¬ãŒã¿ãŒãéžæããã ãã§ãä»ã®ããã°ã©ã ã§ãèªèã§ããéãããå€ãã®ããã°ã©ã ïŒPythonãªã©ïŒãšã®äºææ§ãé«ããããšãã§ããŸãã
æè¿ã®ã³ã¡ã³ãã ããèªãã§ãã人ã®ããã«ã @ thuzhfã®set --separator
æšå¥šã¯ããã®ã¹ã¬ããå
šäœã§ç¹°ãè¿ãèšåãããŠããset -S
æšå¥šãšåãã§ããããšã«æ³šæããŠãã ããã ãã®ãã£ã¹ã«ãã·ã§ã³ã®ã³ã³ããã¹ããããã«ææ¡ããã«ã¯ããã®ããŒãžãset -S
ã§grepã§ããŸãã
@szhuåã®set -S
ã«æ°ã¥ããã«ãã¿ãŸããã ããã¯åºæ¬çã«ç§ã欲ãããã®ã§ãã ãŸãããã®æ°ãããªãã·ã§ã³ã«ã€ããŠä»ã®äººãæžå¿µããŠããããšã«ãæ°ã¥ããŸããã ãããã®æžå¿µã«ã€ããŠä»¥äžã«èããŠã¿ãŸãããïŒéã®ã»ããã§ã¯ãªãã·ã§ã³ãšããŠ-s
ã䜿çšããŠããªãããã以éã¯-s
ã䜿çšããŠ--separator
ãåç
§ããŸãïŒã
--no-modify
ã¯äœããå€æŽããŸãã ã¯ããååãæ瀺çã«å€æŽããå¿
èŠããããŸãïŒäŸïŒ --change-separator
ã' '
ã§ãïŒã ãã®ã»ãã¬ãŒã¿ã¯ããã®å€æ°ãæååããäœæããããšããããã³æååã«å€æããããšãã«äœ¿çšãããŸãïŒããã¯ãPythonã®join()
é¢æ°ãªã©ã®äžéšã®èšèªã§ã¯äžè¬çãªèãæ¹ã§ãïŒã varã¯ããšã¯ã¹ããŒãããããšãããŸãã¯ãŠãŒã¶ãŒããããå®è¡ããããšãã«æååã«å€æãããŸããset ENV_VAR a b c
ã -s
ããªãå Žåãããã©ã«ãã®åºåãæåãšããŠ' '
ãéžæããŸããset -s ':' ENV_VAR
ã ãã®å ŽåãENV_VARã¯ç©ºã®ãªã¹ãã«èšå®ãããŸããset -s ':' ENV_VAR a b:c d e:f
ã ãã®å Žåããã®ã³ãŒããäœæãããŠãŒã¶ãŒã¯ã ':'
ãåºåãæåã§ãããENV_VARã['a b', 'c d e', 'f']
ã®ãããªé
åã«ãªãã 'a b:c d e:f'
ãšããŠãšã¯ã¹ããŒããããããšãæ確ã«ç解ããå¿
èŠããããŸãã ãšã¯ã¹ããŒããããENV_VARãã¹ããŒã¹ã§å§ãŸããã¹ããŒã¹ã§çµããããã«ãããå Žåã¯ã©ããªããŸããïŒ set -s ':' ENV_VAR \ a b:c d e:f\
ã®ãããªãšã¹ã±ãŒãã䜿çšããå¿
èŠããããŸãã ãã®å ŽåãENV_VARã¯[' a b', 'c d e', 'f ']
ã«ãªãã ' a b:c d e:f '
ãšããŠãšã¯ã¹ããŒããããŸããset -s ':' ENV_VAR a b:c d e:f $ENV_VAR
ã ãã®å Žåã $
ãã©ã®ããã«æ©èœãããã«ãã£ãŠç°ãªããŸãã ãªã¹ãã§ã¯ãªãENV_VARã®æååå€ãæœåºããããã«å®çŸ©ãããŠããå Žåããã®ã³ãã³ãã¯ã$ ENV_VARãäžã®ãªã¹ãããå€æãããæååå€ã«çœ®ãæããã®ãšåãã«ãªããŸãããã®å Žåã set -s ':' ENV_VAR a b:c d e:f:$ENV_VAR
ã¯æ¬¡ã®ããã«ãªããŸããããããããªããæ¬åœã«æ¬²ãããã®ïŒ f
$ã®åŸã®$ :
ã«æ³šæããŠãã ããïŒ; ENV_VARïŒæååã§ã¯ãªããªã¹ãïŒã®å€æ°ãæœåºããããã«å®çŸ©ãããŠããå Žåãããã¯Pythonã®å Žåãšåæ§ã«ãªã¹ãæ¡åŒµæäœã«ãªãã¯ãã§ãã ããšãã°ãåŸè
ã®å Žåã ENV_VAR
ãåã«['x', 'y']
ã§ãã£ãå Žåããã®æäœã®åŸã ENV_VAR
ã¯['a b', 'c d e', 'f', 'x', 'y']
ã«ãªããŸãã ENV_VAR
ã®åã®åºåãæåã':'
ã§ãªãå Žåã¯ã©ããªããŸããïŒ åè
ã®å Žåãæ£ããããšãè¡ã£ãŠããããšã確èªããã®ã¯ããªãã®è²¬ä»»ã§ããããšãã°ãå
ã®åºåãæåã':'
ã«å€æŽããããçŸåšã®åºåãæåãå
ã®åºåãæåã«å€æŽããŠãäžè²«ããåºåãæåã䜿çšããå¿
èŠããããŸãã åŸè
ã®å Žåãããã«ããããã®é
åã®ã»ãã¬ãŒã¿ãŒãå
ã®é
åããïŒãããäœã§ããïŒ ':'
ã«èšå®ãããŸããset --change-separator ':' ENV_VAR
ã ENV_VARãååšããªãå Žåãããã°ã©ã ã¯0以å€ã®ãšã©ãŒã³ãŒãã§çµäºããå¿
èŠããããŸããç°¡åã§æ瀺çã§ããset --view-separator ENV_VAR
ããã®äžããã®åé¡ã¯æçœã§ç·æ¥ã§ããããŠãŒã¶ãŒã«ãšã£ãŠå€§ããªåé¡ã§ãããšç§ã¯æ¬åœã«æããŸããããã¯ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããããããã®åé¡ãã§ããã ãæ©ã解決ã§ããããšãé¡ã£ãŠããŸãã å®ã¯ãããã»ã©å€§ããªéãé€ããŠãä»ã®ãšããéã䜿ã£ãŠããä»ã®ïŒéåžžã«å°ããªïŒåé¡ã«ééããããšã¯ãããŸããã
ãã®åé¡ã¯æçœã§ç·æ¥ã ãšæããŸã
@thuzhf ïŒããªãã¯ãããé倧è©äŸ¡ããŠãããšæããŸãã
çç±ã®1ã€ã¯ãïŒ5169ã®åé¡ã$ LD_LIBRARY_PATHã«ãã£ãããšã§ãããããã¯å®éã«ã¯éã®ãªã¹ãã§ã¯ãããŸããã ä»ã®ã·ã§ã«ãšåãããã«ã set LD_LIBRARY_PATH "$LD_LIBRARY_PATH:/some/path"
ã®ããã«èšå®ããå¿
èŠããããŸãã
Fishã¯ãæ£ç¢ºã«3ã€ã®ç¶æ¿/ãšã¯ã¹ããŒããããå€æ°ãèªåçã«ãªã¹ãã«å€æããŸãã
$ PATHã$ MANPATHãããã³$ CDPATHã ãããŠããŸãã«ãã®ãªã¹ãã«ã¯ããšã¯ã¹ããŒãæã«ãïŒãåºåãæåããããŸãã
$ LD_LIBRARY_PATHã®ãããªä»ã®ãæšæºåããããå€æ°ã¯ãfishscriptã®ãªã¹ããšããŠåŠçãããã¹ãã§ã¯ãªãããããã®åé¡ã¯çºçããŸããã æšæºåãããŠããªãå€æ°ã¯ãä»ã®ããã°ã©ã ããšã«ããããããåŠçããªãããã奜ããªããã«åŠçã§ããŸãããããã£ãŠãã»ãã¬ãŒã¿ãŒã¯éèŠã§ã¯ãããŸããã
@fahoæ確ãªèª¬æãããããšãã ããã¯ç§ã«ãšã£ãŠæ¬åœã«çã«ããªã£ãŠããŸãã OKããã®åé¡ã¯ç§ã«ãšã£ãŠè§£æ±ºããããšèšããŸãã
ïŒ2090ã§èª¬æãããŠããMANPATHã®åé¡ã調ã¹ãŸããã ã·ããªãªã¯ãã·ã¹ãã ãã¹ãåŒãç¶ã䜿çšããããã«manpathã«è¿œå ããããšã§ãã
bashã§ã¯ããããexport MANPATH="$MANPATH:/new/path"
ãšèšè¿°ããŸãã MANPATHãèšå®ãããŠããå Žåããããè¿œå ãããŸãã èšå®ãããŠããªãå Žåãããã¯ã³ãã³ãä»å ããŸããããã¯ãã·ã¹ãã ãã£ã¬ã¯ããªã䜿çšããããã®ç·æ§åºæã®æ瀺ã§ãã ãã®æ§æã¯éã§ã¯æ©èœããŸããã åé¡ã¯ãMANPATHãé
åã§ãããããã$ MANPATHãã«ã¯ã³ãã³ã§ã¯ãªãã¹ããŒã¹ãå«ãŸããããšã§ãã
ãå€æ°ãçµã³ä»ãããã¢ãããŒãã§ã¯ãããšãã°fish_manpath
ããã³ãã³ã§åºåãããæååãšããŠMANPATHããã©ãŒãªã³ã°ããé
åãšããŠäœ¿çšã§ããŸãã ããã¯å®å
šã«éã®ã¹ã¯ãªããã§æ§ç¯ã§ããŸãã ãã ããMANPATHã ãã§ãªãããã¹ãŠã®ãã¹ã®ãããªå€æ°ã«å¯ŸããŠãããå®è¡ããå¿
èŠããããŸããããã¯ã管çæ¹æ³ãæ確ã§ã¯ãªãé倧ãªäºææ§ã®äœäžã«ãªããŸãã ãŸããåãåé¡ããããŸããããšãã°ãzshã®manpath
é
åå€æ°ã¯è¿œå ããã®ãé¢åãªã®ã§ããªãååšããã®ãã¯æ確ã§ã¯ãããŸããã
ããã§ã®ç§ã®ææ¡ã¯ãMANPATHã®ç¶æ³ãè¯ããæªããããŸããã ããã¹ãããšã¯ãã³ãã§ãããMANPATHã«è¿œå ããããã®ç°¡åãªã¹ããŒãªãŒããããšæããŸããããã¯æ¬¡ã®ãšããã§ãã
set -q MANPATH || set MANPATH ''
set -x MANPATH $MANPATH /new/path
config.fishã«è²Œãä»ããã®ã¯ããã»ã©èŠçã§ã¯ãããŸããã
ããã§ã®ç§ã®ææ¡ã¯ãMANPATHã®ç¶æ³ãè¯ããæªããããŸããã ããã¹ãããšã¯ãã³ãã§ãããMANPATHã«è¿œå ããããã®ç°¡åãªã¹ããŒãªãŒããããšæããŸããããã¯æ¬¡ã®ãšããã§ãã
@ridiculousfish ïŒç§ã¯ããã«äžæ©é²ãããšãèããŠããŸãããå®éã«ã¯ããããã®ç¹å¥ãªå€æ°ãå²ãåœãŠæã«ãïŒãã§åå²ããåŒçšç¬Šã§å²ãŸããå±éã§ã¹ããŒã¹ã®ä»£ããã«ãïŒãã§çµåããŸãã
ã€ãŸãã set -gx MANPATH "$MANPATH:/new/path"
ãå®è¡ãããšãéãèªåçã«åå²ãå®è¡ããçµæãšããŠset -gx MANPATH "" /new/path
ã«çžåœããŸãã
ããã¯ããïŒãã$ MANPATHïŒããã³$ PATHãããã³$ CDPATHïŒã®ãã¹ã«è¡šç€ºãããªãããšãæå³ããŸãããé以å€ã®ãŠãŒãã£ãªãã£ãç Žæããããããšã«ãã衚瀺ã§ããŸããã
ããã¯ãŸãããããåŠçããçžäºäºææ§ã®ããæ¹æ³ãè¿œå ããã®ã§ããããããã€ãç¹å¥ãªåŠçãåé€ããããšãå¯èœã«ããŸã-ããªãã¯:
ã§å²ãåœãŠã (string split : -- $MANPATH)
ã§ããã䜿çšããå¿
èŠããããŸã
@fahoç§ã¯ãã®èãã«ç±å¿ã§ã-ãŠãŒã¶ãŒã¯ã©ã®ããã«ããŠå€æ°ããã®ç¹å¥ãªæ±ããåããŠãããšããŒã¯ããŸããïŒ splitenv
ã¯ãããããŸããïŒ
ãŠãŒã¶ãŒã¯ãå€æ°ããã®ç¹å¥ãªæ±ããåãããã®ãšããŠã©ã®ããã«ããŒã¯ããŸããïŒ
ç§ã®èãã¯ãå®éã«ã¯ããŒãã³ã°ããŸã£ããèš±å¯ããªãããšã§ããã$ PATHãªã©ã®ç¹å¥ãªåäœãšããŠãã®ãŸãŸã«ããŠãããŠãã ããã ããã«ãããå°æ¥ã®ããæç¹ã§ãªã¹ãåããéããããšãã§ããŸãã
ãã ããä»ã®å€æ°ã§ãããèš±å¯ãããšãä»ã®å€æ°ã§ã圹ç«ã€ããšãããããŸãããããšãã°ãå€éšãšã®äºææ§ã®ããã«ã$ EDITORã1ã€ã®èŠçŽ ïŒ set EDITOR "emacs -nw"
ïŒãšããŠèšå®ãããŠããããšãåã«èª¬æããŸãããããŒã«ã§ãããéã¯ããããªã¹ãã§ããã°ãã£ãšè¯ããšæããŸãã
ãããã£ãŠãPATHã«äŒŒãŠããå Žåãé€ããŠãåºåãæåãšããŠããã©ã«ãã§_space_ã䜿çšããããšã«ãªããŸãïŒååãPATHã§çµããå Žåã¯ããããåé¡ãªããšä»®å®ããŸãïŒã
splitenvã¯ãããããŸããïŒ
ç§ã¯ããã®ããã«å¥ã®ãã«ãã€ã³ãå°å ¥ããã®ãæ¬åœã«å¥œãã§ã¯ãªãã®ã§ãããããåŒæ°ããèšå®ãžã®ãªãã·ã§ã³ã䜿çšããã§ãããã
ãç¹å¥ãªå Žåã®PATH / MANPATH / CDPATHã¯å¥åŠã§ããããäžè¬çãªè§£æ±ºçãå¿ èŠã§ãããšç§ã¯åæããŸãã
ç¹æ®ã±ãŒã·ã³ã°ã®PATH / MANPATH / CDPATHãåæ¢ããããšãææ¡ããŸãã ãããã¯ïŒéã®ãšã³ããŠãŒã¶ãŒã«ãã£ãŠïŒä»ã®æ®»ãšåãããã«æ±ãããŸãã $ PATHïŒããã³ãã®ä»ïŒã¯ãã³ãã³ãå«ãåäžã®æååïŒãŸãã¯ãéã®å°éçšèªã§ã¯é·ãã1ã®ãªã¹ãïŒã«ãªããŸãã ããããå éšã§ã©ã®ããã«åŠçããããã§ã¯ãªããéã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«èšåããŠããããšã«æ³šæããŠãã ããã éã®å éšã§ã®å®è£ ãã©ã®ããã«ãªããã¯ããããŸãããä»ã®äººã«åé¡ãææããŠããããŸãã
確ãã«ãåŸæ¹äºææ§ããªããšãããã¡ãªããããããŸãããã·ã³ãã«ããšãšã¬ã¬ã³ã¹ãå€§å¹ ã«åäžããã䟡å€ããããšæããŸãã ïŒ2090ã«ã察å¿ãããšæããŸãã
ã¿ããªã©ãæããŸããïŒ