Powershell: ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ | ๋‹ค์Œ ์ค„์— ์—ฐ์† ๋ฌธ์ž๋กœ?

์— ๋งŒ๋“  2017๋…„ 01์›” 19์ผ  ยท  47์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PowerShell/PowerShell

PowerShell์ด โ€‹โ€‹์ด์ „ ์ค„์˜ ์—ฐ์†์œผ๋กœ ์ค„์—์„œ ๊ณต๋ฐฑ์ด ์•„๋‹Œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ ํŒŒ์ดํ”„ ๋ฌธ์ž๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$result = Get-Process
    | Where WS -gt 500mb
    | Format-Table VM, WS, CPU, ID, ProcessName

๋ฐฑํ‹ฑ์„ ์ถ”๊ฐ€ํ•  ํ•„์š” ์—†์ด!

Issue-Discussion Resolution-Fixed WG-Language

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@JamesWTruher ๋ฅผ ๋‹ค๋ฃจ๊ธฐ

Get-Process | Where CPU | Where Path
| Get-Item | Where FullName -match "AppData"
| Sort-Object FullName -Unique # I'm so proud of this highlighting "bug" by the way

@BrucePay ๋งž์•„์š”. ๋Œ€ํ™”ํ˜• ๊ฒฝํ—˜์€ _๋ช…์‹œ์ ์œผ๋กœ_ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •๋ง ๋Œ€ํ™”ํ˜•๊ณผ ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์— ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด _๊ฐ€๋” PSReadLine ์—†์ด PowerShell์„ ์‚ฌ์šฉํ•ด ๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค_.

ISE ๋˜๋Š” VS Code์—์„œ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค.

"missing statement block" ๋˜๋Š” "empty pipe element" ์œ ํ˜• ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  PSReadline์ด ์—†์œผ๋ฉด ํŒŒ์ดํ”„ ๋’ค์— ์ค„ ๋ฐ”๊ฟˆ

Get-Process |
Where CPU
if($True)
{



md5-9d813a39f05f47b572d1068b0164b382



Or whether I will write the (necessary) generic `catch { "You threw $_" }` handler after



md5-6b461006504b741b884d4fb3f126b489



And it won't let me put a comment where it thinks there should be code, so neither of these is possible:



md5-adc435ab733361316365acfc69de09df



```posh
Get-Process |
# I only want actual apps, with windows
Where MainWindowHandle

์˜ˆ, ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ค„ ๋ฐ”๊ฟˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ˜์†”์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” _๋˜ ๋‹ค๋ฅธ ์žฅ์†Œ_์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค(_ํŠนํžˆ_ PSReadLine์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).

๋ชจ๋“  47 ๋Œ“๊ธ€

์Šคํฌ๋ฆฝํŠธ์—์„œ - ์˜ˆ, ํ•˜์ง€๋งŒ ์ž…๋ ฅ ํ›„ ์™„์ „ํ•œ ๋ช…๋ น์ค„์„ ๊ฐ–๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ˜์†”์—์„œ ๊ธฐ์กด ๋ฐฉ์‹์˜ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๋˜๋Š” Alt+e,p ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ํ† ๋ก  #2819

๋Œ€ํ™”์‹ ์„ธ์…˜์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ UX๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ NewLine ํŒŒ์„œ๋Š” ๋‹ค์Œ NewLine ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์ตœ๋Œ€ | ๋˜๋Š” NewLine ๊นŒ์ง€ ๊ณต๋ฐฑ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. .

์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ญ์ƒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฐ์† ๋ฌธ์ž `(๋ฐฑํ‹ฑ)๋ฅผ ์ œ๋•Œ์— ์‚ญ์ œํ•˜๋ผ๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

$result = Get-Process |
     Where WS -gt 500mb |
     Format-Table VM, WS, CPU, ID, ProcessName

ํŒŒ์„œ๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

if( 1 -eq (get-random 2)) {
    "True"
}
else {
    "False"
}

@lzybkr ๋ถ„๋ช…ํžˆ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์ค„์„ ์“ฐ๊ธฐ _ ๋ฐ˜๋“œ์‹œ _ํ•˜์ง€ ํ‰๊ท  ๋ช… ์•Š๋Š” ์ดํ•ด ํ•  ์ˆ˜์žˆ์„ ํŒŒ์„œ๋ฅผ ๊ฐ€์ง„ - ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด, ์‹ฌ์ง€์–ด "์ž์‹ ์˜ ๋ผ์ธ์— ์ค‘๊ด„ํ˜ธ"๋‹ค๋ฅธ ์Šคํƒ€์ผ์˜ ์ผ์ด ์œ„์™€ ๊ฐ™์ด ์ŠคํŠธ๋กœ๋ธŒ ์ŠคํŠธ ๋ฃน ์Šคํƒ€์ผ์„ ์ฑ„ํƒ ๋ธŒ๋ ˆ์ดํฌ ๋ถ™์—ฌ ๋„ฃ๊ธฐ (ํŠนํžˆ PSReadLine์ด ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  Ctrl+V๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—). ์ฐจ์ด๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@iSazonov ๋Œ€ํ™”์‹์œผ๋กœ Enter ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ else ์ง€๊ธˆ์ฒ˜๋Ÿผ. shift + enter ๋ฅผ ๋ˆŒ๋Ÿฌ ์ฝ˜์†”์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(PSReadLine์ด ์žˆ๋Š” ๊ฒฝ์šฐ).

PSReadline์€ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์œผ๋กœ ์—‰๋ง์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TAB ๋ฌธ์ž๊ฐ€ PSReadline์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ํ™•์žฅ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋Š” ์—ฌ๋Ÿฌ ์ค„ ์ž…๋ ฅ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹๊ณผ ๋” ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PSReadline์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ์š”์ ์€ ์ •๋ง ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ๊ฒฝํ—˜์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์Šคํฌ๋ฆฝํŠธ์— ๋™์ผํ•œ ํ…์ŠคํŠธ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๊ณผ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ณ  ์ด์ƒ์ ์œผ๋กœ ๋™์ผํ•˜๋„๋ก ์˜๋„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค(์˜ค๋ฅธ์ชฝ ํด๋ฆญ)์—์„œ ์˜๋„์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์ €๋Š” ์ด ์ œ์•ˆ์— ๋Œ€ํ•ด ์–ด๋–ค ์‹์œผ๋กœ๋“  ํŒ๋‹จ์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ง€์ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ํด๋ฆญ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ๊ฐ ์ค„์„ shift+์ž…๋ ฅํ•œ ๋‹ค์Œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ „์ฒด ํด๋ฆฝ๋ณด๋“œ ๋ฒ„ํผ๋ฅผ ์ฝ˜์†”์— ๋ถ™์—ฌ๋„ฃ๋Š” ์ผ๋ถ€ ํ˜„๋Œ€ํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋”๋ผ๋„ ๊ทธ ์ž์ฒด๋กœ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ณ (๋ถ„์„ ์˜ค๋ฅ˜) ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์ด ์‚ฐ์žฌ๋˜์–ด ์žˆ๋Š” ๋งŽ์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณธ ์ ์ด ๋ช‡ ๋ฒˆ์ด๋‚˜ ๋ ๊นŒ์š”? ๊ทธ ์‹คํ–‰? ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ๊ฒƒ์„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค (๋ถ™์—ฌ ๋„ฃ๊ธฐ ํ•œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋งค์šฐ ํ•ด๋กœ์šธ ์ˆ˜ cd ๋‚ด ํ˜„์žฌ C์— ๋จธ๋ฌผ๋„๋ก ๋ช…๋ น์„ ์ œ๋Œ€๋กœ ๋ถ„์„ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” \ ๋””๋ ‰ํ† ๋ฆฌ del *.* -r -fo ๋ช…๋ น์ด ์‹คํ–‰. ..). ์˜ค๋ฅธ์ชฝ ํด๋ฆญ-๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์‹ค์ œ๋กœ ์ „์ฒด ๋ธ”๋ก์„ ๋ถ™์—ฌ๋„ฃ๊ณ  PowerShell์ด โ€‹โ€‹์‹คํ–‰ ์ธก์—์„œ ์ด๋ฏธ ์ž˜ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ์˜ค๋Š˜๋‚ ์˜ ๋Œ€ํ™”ํ˜• ํ™˜๊ฒฝ์€ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ-๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ๋ช…๋ น ๋ชจ์Œ์ด ์•„๋‹ˆ๋ผ ๋ถ™์—ฌ๋„ฃ์„ ๋•Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํฌ๋ฆฝํŠธ์— ๋™์ผํ•œ ํ…์ŠคํŠธ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๊ณผ ์ด๋ฏธ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ-๋ถ™์—ฌ๋„ฃ๊ธฐ์—์„œ ๋ถ€๋ถ„ ์‹คํ–‰์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋Œ€ํ™”ํ˜• ad-hoc PowerShell์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜์†”์— ์—ฌ๋Ÿฌ ์ค„ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์—ฌ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋“œ๋ฌธ ์ผ์ด๋ฉฐ ์˜ค๋Š˜๋‚  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ํ•˜๋˜ ๋Œ€๋กœ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ. ์šฐ๋ฆฌ์˜ ๋‚˜๋จธ์ง€ ์ผ๋ฐ˜ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์šฐ๋ฆฌ์˜ ํŒŒ์ดํ”„๋ผ์ธ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ํ•œ ํ•œ ์ค„์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์ง€์ ํ–ˆ๋“ฏ์ด ๋Œ€ํ™”ํ˜• ๊ฒฝํ—˜์ด ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ€๊น๋„๋ก ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๊ณ  ์•„๋งˆ๋„ ๊ฐœ์„ ๋˜์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. , ์ด์ƒ์ ์œผ๋กœ๋Š” ๋™์ผํ•œ ํ…์ŠคํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ์— ๋„ฃ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด: PowerShell์ด โ€‹โ€‹์ค„ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ค„ ์—ฐ์† ๋ฌธ์ž๊ฐ€ ์—†๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ง€์›ํ•˜๋„๋ก ํ•˜๊ณ , ๋Œ€ํ™”ํ˜• ์‚ฌ์šฉ๊ณผ ์Šคํฌ๋ฆฝํŒ… ๊ฒฝํ—˜ ๊ฐ„์— ๋” ๋‚˜์€ ์ผ๊ด€์„ฑ์ด ์žˆ๋„๋ก ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ผ๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ํด๋ฆญ์€ PowerShell ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ conhost ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Conhost๋Š” ํƒ€์ดํ•‘ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ํ˜„์žฌ ์ฝ˜์†” ํ”„๋กœ์„ธ์Šค์™€์˜ ์ผ๋ถ€ ์กฐ์ • ์—†์ด ๋ถ™์—ฌ๋„ฃ๊ธฐ์™€ ๋™์ผํ•˜๋‹ค๊ณ  ํ•ญ์ƒ ๊ฐ€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ. ์˜ค๋ฅธ์ชฝ ํด๋ฆญ ๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์–ด์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. else ์™€ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ดํ”„๊ฐ€ ์žˆ๋Š” ๋ช…๋ น(์ฝ˜์†”๊ณผ ํŒŒ์ผ ๋ชจ๋‘์—์„œ)์„ ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์ „์— ์ง€์ ํ•œ ๋Œ€๋กœ if/else๊ฐ€ ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹คํ–‰๋  ๋•Œ์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ | ์ค„์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ์—ฐ์† ๋ฌธ์ž๋กœ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ์€ ํŠนํžˆ ์ด์ „ ๋™์ž‘์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฌด์—‡์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๊นŒ?

๋‚ด iPad์—์„œ ๋ณด๋‚ธ

2017๋…„ 3์›” 8์ผ 17:04์— Michael T Lombardi < [email protected] [email protected] >์ด(๊ฐ€) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ดํ”„๊ฐ€ ์žˆ๋Š” ๋ช…๋ น(์ฝ˜์†”๊ณผ ํŒŒ์ผ ๋ชจ๋‘์—์„œ)์„ ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด์ „์— ์ง€์ ํ•œ ๋Œ€๋กœ if/else๊ฐ€ ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹คํ–‰๋  ๋•Œ์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/PowerShell/PowerShell/issues/3020#issuecomment-285101638 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/AHgYUW- ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด | ๊ฐ€ EOL _๋ฟ๋งŒ ์•„๋‹ˆ๋ผ_ ์ƒˆ ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๊ณ„์† ๋ฌธ์ž๊ฐ€ ๋  ์ˆ˜ ์—†๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@RichardSiddaway ๊ทธ๊ฒƒ์€ ๊ฐ€๋…์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋ก€ ๋ฐ ์Šคํƒ€์ผ ์ €์žฅ์†Œ์˜ ์ค„ ๋ฐ”๊ฟˆ์— ๋Œ€ํ•œ ํ† ๋ก ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ์ค„ ๋์—์„œ ๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์ด๋Ÿฐ ์‹์œผ๋กœ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ค„์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์œผ๋กœ ํŒŒ์ดํ”„ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠนํžˆ ์ค„์ด ๊ธธ๊ณ  ๋์—์„œ ํŒŒ์ดํ”„๋ฅผ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์—ฐ์†์ด๋ผ๋Š” ๊ฒƒ์„ _์ •๋ง_ ๋ถ„๋ช…ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path |
    Get-Item | Where FullName -match "AppData" | 
    Sort FullName -Unique

๋Œ€

Get-Process | Where CPU | Where Path
    | Get-Item | Where FullName -match "AppData"
    | Sort FullName -Unique

๋“ค์—ฌ ์“ฐ๊ธฐ ์œ„์˜ ์˜ˆ์—์„œ @jaykul ์€ ์‹œ๋ ฅ ๊ด€์ ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„ ๊ธฐํ˜ธ๋Š” ์ถ”๊ฐ€(IMO ๋ถˆํ•„์š”) ํ‘œ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์˜ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ, ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ํ˜ธ์†Œ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Get-Process | Where CPU | Where Path
|Get-Item | Where FullName -match "AppData"
|Sort FullName -Unique

๋‚ด ๋ˆˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งค์šฐ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path |
    Get-Item | Where FullName -match "AppData" |
    Sort FullName -Unique

๋„์›€์ด๋˜๋Š” ๊ฒƒ์€ ๋“ค์—ฌ ์“ฐ๊ธฐ์ž…๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค)

FWIW, ๋‚˜๋Š” ๊ธด ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐฑํ‹ฑ์˜ ์‚ฌ์šฉ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ฆฌ๋ทฐ์—์„œ ๋ฐฑํ‹ฑ์„ ๋ณผ ๋•Œ๋งˆ๋‹ค ์Šค์ฟผ์‹œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ํŒŒ์ดํ”„๋ฅผ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. @JamesWTruher (ํŒŒ์ดํ”„์™€ ๋ช…๋ น์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ํ•˜๋‚˜ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ) - ๊ณ„์†๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์‹œ๊ฐ์  ํ‘œ์‹œ๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. . ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ์ฝ”๋“œ๋ฅผ ์Šคํฌ๋กคํ•  ๋•Œ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋œ ๋ช…์‹œ์ ์ธ ์ถ”๋ก ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@Jaykul ์ด๊ฒƒ์€ ๋Œ€ํ™”์‹ ๋ช…๋ น์ค„ ๊ฒฝํ—˜์„ ์™„์ „ํžˆ ๊นจ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ณ  return ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

PS> dir
>

์ถœ๋ ฅ์ด ๋‚˜์˜ค๋‚˜์š”? ์•„๋‹ˆ์˜ค, ํŒŒ์„œ๊ฐ€ ์—ฐ์†์ด ๋  _์ˆ˜๋„ ์žˆ๋Š”_ ๋‹ค์Œ ํ† ํฐ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฆฌํ„ด ํ‚ค๋ฅผ ๋‘๋“œ๋ฆฌ์‹ญ์‹œ์˜ค. ํŒŒ์„œ๊ฐ€ ํ† ํฐ์ด ์—ฐ์†์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ์ „ํžˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PS> dir
>
>

ํ™•์ธ - | sort Length ํ•˜๊ณ  ๋ฆฌํ„ด์„ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค.

PS> dir
>
>
> | sort Length
>

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ _still_์ด ์—ฐ์† ํ† ํฐ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์ƒˆ ๋ผ์ธ์„ ์ˆ˜์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‹น์‹ ์€ '๋‚˜๋Š” ์ด๊ฒƒ์œผ๋กœ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ ์งœ๋ฅผ ์žก์ž'๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. Get-Date ํ•˜๊ณ  return ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ - ์ถœ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Get-Date ๋ถ€ํ„ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋‹ˆ์š” - ๋งˆ์นจ๋‚ด dir | sort Length ๋ช…๋ น์„ ์™„๋ฃŒํ–ˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ํ‘œ์‹œ๋˜๋Š” ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ๋ช…๋ น ํŒ๋…๊ธฐ๋Š” ์ด์ œ Get-Date ์‹œ์ž‘ํ•œ ๋ช…๋ น์„ ์™„๋ฃŒํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ง€ ์˜ค๋ฅ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋”์ฐํ•œ ๋Œ€ํ™”ํ˜• ๊ฒฝํ—˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ - ์•„๋งˆ๋„ @lzybkr์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ์˜ ๊ธฐ๋ณธ ์„ค๊ณ„ ์›์น™ ์ค‘ ํ•˜๋‚˜๋Š” ๋ช…๋ น์ค„์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ๋‹จ์ˆœํžˆ ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ๊ณ  ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. emdash ๋ฐ endash ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” Word ๋ฌธ์„œ์—์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ '|' Haskell ํŒจํ„ด ์ผ์น˜์™€ ๊ฐ™์€ ๊ฒƒ์—์„œ ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๋ด…๋‹ˆ๋‹ค.
fib n | n == 0 = 1 | n == 1 = 1 | n >= 2 = fib (n-1) + fib (n-2)
PowerShell์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์— ๊ด€ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ๊ฐ“ ํƒœ์–ด๋‚œ ์•„๊ธฐ๋ผ๋Š” ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

# This works everywhere
Get-Process |
Select-Object -First 1

# This errors at the prompt unless using soft returns, note the two blank lines;
# hitting enter after the first one causes it to error out.
# Note that with soft returns you can go just about forever before adding the next line.
Get-Process |


Select-Object -First 1

# This will run fine in either
If ($false) {
  ' False Output'
} Else {
  'True Output'
}
# This will error in the prompt (unless using soft returns) but pass in a file
If ($false) { 'False Output' }
Else { 'True Output' }

screen shot 2018-03-15 at 2 35 35 pm

screen shot 2018-03-15 at 2 38 24 pm

์ œ์ณ๋‘๊ณ , ๋‚˜๋Š” ๊ปด์•ˆ์ง€ ์•Š์€ if/else๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์†Œํ”„ํŠธ ๋ฆฌํ„ด ์—†์ด ํ”„๋กฌํ”„ํŠธ์—์„œ ๋‹ค์Œ์ด ์‹คํŒจํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ/๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

Get-Process
| Select-Object -First 1

๋‚˜๋Š” ํ”„๋กฌํ”„ํŠธ์—์„œ ๋Œ€ํ™”ํ˜•์ผ ๋•Œ ๊ฐ€๋…์„ฑ, ํŠนํžˆ ํ•œ๋ˆˆ์— ๋ณด๋Š” ๊ฐ€๋…์„ฑ์— ๋Œ€ํ•ด ํŠน๋ณ„ํžˆ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ(์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜๋Š” ์ž ์‹œ ์ „์— ์ผ๊ธฐ ๋•Œ๋ฌธ์—) ์Šคํฌ๋ฆฝํŠธ์™€ ๋ชจ๋“ˆ์„ ์ž‘์„ฑ/์œ ์ง€ํ•  ๋•Œ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ž‘์—… ๋””๋ฒ„๊น… ๋“ฑ

@JamesWTruher ๋ฅผ ๋‹ค๋ฃจ๊ธฐ

Get-Process | Where CPU | Where Path
| Get-Item | Where FullName -match "AppData"
| Sort-Object FullName -Unique # I'm so proud of this highlighting "bug" by the way

@BrucePay ๋งž์•„์š”. ๋Œ€ํ™”ํ˜• ๊ฒฝํ—˜์€ _๋ช…์‹œ์ ์œผ๋กœ_ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •๋ง ๋Œ€ํ™”ํ˜•๊ณผ ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์— ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด _๊ฐ€๋” PSReadLine ์—†์ด PowerShell์„ ์‚ฌ์šฉํ•ด ๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค_.

ISE ๋˜๋Š” VS Code์—์„œ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค.

"missing statement block" ๋˜๋Š” "empty pipe element" ์œ ํ˜• ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  PSReadline์ด ์—†์œผ๋ฉด ํŒŒ์ดํ”„ ๋’ค์— ์ค„ ๋ฐ”๊ฟˆ

Get-Process |
Where CPU
if($True)
{



md5-9d813a39f05f47b572d1068b0164b382



Or whether I will write the (necessary) generic `catch { "You threw $_" }` handler after



md5-6b461006504b741b884d4fb3f126b489



And it won't let me put a comment where it thinks there should be code, so neither of these is possible:



md5-adc435ab733361316365acfc69de09df



```posh
Get-Process |
# I only want actual apps, with windows
Where MainWindowHandle

์˜ˆ, ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ค„ ๋ฐ”๊ฟˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ˜์†”์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” _๋˜ ๋‹ค๋ฅธ ์žฅ์†Œ_์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค(_ํŠนํžˆ_ PSReadLine์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).

@Jaykul 1 ๋ฐ @JamesWTruher 2 ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path |
    Get-Item | Where FullName -match "AppData" | 
    Sort FullName -Unique

์ง€์ ํ–ˆ๋“ฏ์ด ๋“ค์—ฌ์“ฐ๊ธฐ๋กœ ์ธํ•ด ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ๋•Œ ์ฝ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๋ ๋ถ€๋ถ„์„ ๋ณผ ํ•„์š” ์—†์ด ์ด ์„ธ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ํ•จ๊ป˜ '์—ฐ๊ฒฐ'๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ํŒŒ์ดํ”„ ๋’ค์— ๋ฐฑํ‹ฑ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ _ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ๊ธฐ์–ตํ•  ๋•Œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋‚˜ ์ž์‹ ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ๊นจ๋ ค๊ณ ํ•˜๋Š” ์Šต๊ด€์ž…๋‹ˆ๋‹ค (๋ธŒ๋ฆฌ์นญ์ด ์•„๋‹Œ ๋ฐฑํ‹ฑ).

PSReadline์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜์†”์— ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ(๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ์Œ) ํ† ๋ก  ์ค‘๊ฐ„์— ์ถ”๊ฐ€ํ•  ๋‚ด์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๊ฐ€ ๋ผ์ธ ๋์ด ์•„๋‹Œ ๋‹ค์Œ ๋ผ์ธ์— ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ F#๊ณผ ์œ ์‚ฌํ•œ ์•„์ด๋””์–ด๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

F# let f1 str server = str |> parseUserName |> getUserByName server |> validateLogin <| DateTime.Now

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” PS๋ฅผ ์ข€ ๋” ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค(๋ง์žฅ๋‚œ ์˜๋„) ;)

F# ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Elm , Haskell , Elixir , ์‹ฌ์ง€์–ด Google์˜ ์…ธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ (์—ฌ๊ธฐ์„œ ์ƒˆ ์ค„์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”...).

@michaeltlombardi Unix ์…ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›ํ•˜๋Š” ๊ฒฝ์šฐ PowerShell์—์„œ ์ค„ ๋ฐ”๊ฟˆ์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path `
| Get-Item | Where FullName -match "AppData" `
| Sort-Object FullName -Unique

F#์€ PowerShell๊ณผ ๋‹ฌ๋ฆฌ ๊ณต๋ฐฑ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(์˜คํ”„์‚ฌ์ด๋“œ ๊ทœ์น™). Elm, Haskell ๋ฐ Elixir๋Š” ๋ฌผ๋ก  ๊ป์งˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

_๋‚˜์œ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ๋ถˆ๋งŒ_...

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” IncompleteParse ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ํ˜ธ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํฌ์ฐฉํ•˜๊ณ  ์ถ”๊ฐ€ ์ž…๋ ฅ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ํ˜ธ์ŠคํŠธ ๊ตฌํ˜„์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž˜๋ชปํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์†Œ์œ ์ž์—๊ฒŒ ํ•ญ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋Œ€ํ™”ํ˜•๊ณผ ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์— ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๊ฐ€๋”์”ฉ PSReadLine ์—†์ด PowerShell์„ ์‚ฌ์šฉํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” PSReadLine ์—†์ด 10๋…„ ๋„˜๊ฒŒ PowerShell์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ?

์†Œํ”„ํŠธ ๋ฆฌํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ํ”„๋กฌํ”„ํŠธ์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋นˆ ์ค„์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ํ˜ธ์ŠคํŠธ ๊ตฌํ˜„์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ๋ฌธ์ œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

if/else๊ฐ€ ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹คํ–‰๋  ๋•Œ์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์˜ˆ. ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. C#์˜ ์ค‘๊ด„ํ˜ธ ์Šคํƒ€์ผ์„ ์ผ์น˜์‹œํ‚ค๋Š” ๋Œ€์‹  OTBS๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค OTBS(์˜ˆ: DSL)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฐธ๊ณ : ์›๋ž˜ ์ฝ˜์†” ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ IncompleteParse ์˜ˆ์™ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋นˆ ์ค„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ค„์„ ์ฝ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "์ž‘๋™"ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ•ญ์ƒ ์—ฌ๋ถ„์˜ ์ค„ ๋ฐ”๊ฟˆ์„ ๋ˆŒ๋Ÿฌ์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@Jaykul ๊ทธ๋Ÿผ F#์˜ #light ์ง€์‹œ์–ด์˜ ๋ฐ˜๋Œ€๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ณต๋ฐฑ์ด ๊ด€๋ จ์ด ์—†๊ณ  ์„ธ๋ฏธ์ฝœ๋ก ์ด ํ•„์ˆ˜์ธ #heavy์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‚ด ์ƒ๊ฐ์— PS์—์„œ ์ค„ ๋ฐ”๊ฟˆ์„ ์ด์Šค์ผ€์ดํ”„ํ•˜๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด๋ณด๋‹ค ๋ฌธ์ œ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. PS์˜ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋Š” ๋นŒ์–ด๋จน์„ ๋ฐฑํ‹ฑ ์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ๋Š” ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ˆˆ์— ๋„๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ•์กฐ ํ‘œ์‹œ ๊ตฌ์„ฑํ‘œ๋Š” ์ƒ‰์ƒ์„ ์ƒ๋‹นํžˆ ๋‘”ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ๋ฐฑํ‹ฑ์ด ํฉ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ํŽธ์ง‘ํ•  ๋•Œ ์‹ค์ˆ˜๋กœ ๋ฐฑํ‹ฑ์„ ๋†“์น  ํ™•๋ฅ ์ด ์ƒ๋‹นํžˆ ๋†’์Šต๋‹ˆ๋‹ค.

๋ฐฑํ‹ฑ ์‹ค์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ๊ฑด์ดˆ ๋”๋ฏธ์—์„œ ๋ฐ”๋Š˜์„ ์ฐพ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ์ค„์„ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ดํ”„์—์„œ ์‹œ์ž‘ ํ˜•์‹์„ ์ž์ฒด ์Šคํƒ€์ผ๋กœ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :/

@vexx32 '`'์ด(๊ฐ€) ๋ณด๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ '|' ์•„๋‹ˆ๋‹ค.

@Jaykul ๊ทธ๋Ÿผ F#์˜ #light ์ง€์‹œ์–ด์˜ ๋ฐ˜๋Œ€๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ณต๋ฐฑ์ด ๊ด€๋ จ์ด ์—†๊ณ  ์„ธ๋ฏธ์ฝœ๋ก ์ด ํ•„์ˆ˜์ธ #heavy์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@BrucePay๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋˜ ๋‹ค๋ฅธ ๊ตฌ๋ฌธ ํŠธ๋ฆญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

try { throw 5 }
catch [ArgumentException] {  <# ... #> }
catch { Write-Warning Whatever }

์ฝ˜์†”์— ์ž…๋ ฅํ•  ๋•Œ ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ๋กœ _๊น”๋”ํ•˜๊ฒŒ_ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@BrucePay ๋งž์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์€ @vexx32๊ฐ€ ๋‚˜์—ด๋œ ๋ชจ๋“  ์ด์œ  ๋•Œ๋ฌธ์—

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์˜์กดํ•˜๋Š” PowerShell์˜ ์—ฌ๋Ÿฌ ๊ธฐ์กด ๋™์ž‘์€ ์‹ค์ œ๋กœ ํ˜ธ์ŠคํŠธ ๊ตฌํ˜„์˜ ๊ฒฐ๊ณผ๋ผ๋Š” ์ ์„ ์ง€์ ํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ๊ณต์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‹ค๋ฅธ ํ•œํŽธ, ์ด๊ฒƒ์€ ํ˜ธ์ŠคํŠธ ๊ตฌํ˜„์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๋ฏธ ์ด๋Ÿฌํ•œ ๊ธฐ๋Œ€๋ฅผ ๊นจ๋œจ๋ฆฌ๋Š” ์–ธ์–ด์˜ ์š”์†Œ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

@michaeltlombardi ์ž˜๋ชป๋œ ํ˜ธ์ŠคํŠธ ๊ตฌํ˜„์€ ๋Œ€ํ™”ํ˜• ํ™˜๊ฒฝ์„ ์—ด์•…ํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ ์–ธ์–ด ์ž์ฒด์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋Œ€๋ถ€๋ถ„์˜ PowerShell '์Šคํฌ๋ฆฝํŠธ'๊ฐ€ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ž…๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€ํ™”ํ˜• ํ™˜๊ฒฝ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ๋“ค ์—†์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค

์š”์ ์€ | ๋ฅผ ์ค„ ๋์— ๋„ฃ์œผ๋ฉด ์—ฐ์†์ด ์•”์‹œ์ ์ด๋ฉฐ ์š”์ฒญ์— ๋”ฐ๋ผ ์—ฐ์† ๋ฌธ์ž๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  | ๊ธฐํ˜ธ๋Š” ๋ณด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. F# ๋˜๋Š” Python๊ณผ ๋‹ฌ๋ฆฌ PowerShell์€ ์…ธ์ด๊ณ  ๋•Œ๋กœ๋Š” ๋งค์šฐ ์กฐ๋ฐ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Jaykul

์ฝ˜์†”์— ์ž…๋ ฅํ•  ๋•Œ ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ๊ฒฝํ—˜์€ ์šฐ๋ฆฌ์™€ ๋Œ€๋ถ€๋ถ„์˜ ๊ณ ๊ฐ์—๊ฒŒ ์—ฌ์ „ํžˆ ์ฃผ์š” ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹คํ—˜์  ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”ํƒ€ ๊ธฐ๋Šฅ์ด ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๊ณ , ์‹คํ—˜์  ๊ธฐ๋Šฅ์œผ๋กœ ๋…ธ์ถœ๋œ ๋‹ค์Œ, ์ „๋ฐ˜์ ์ธ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ๊ฒฝํ—˜์ด ๊ธฐ๋ณธ์ด๋ผ๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์š”์ ์€ _first_ ์˜๊ฒฌ์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ˜์†”์ด ์†์ƒ ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์ฝ˜์†”์—์„œ ์ž‘๋™ํ•ด์•ผ _๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ_ ๋‘ ๋ฒˆ์งธ catch ๊ฐ€ ์œ„์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. PSReadLine๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ค„ ReadLine์ด ์žˆ๋Š” ์ฝ˜์†”์—์„œ๋งŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ณ  Shift+Enter ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ค„(๋˜๋Š” ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ) -- ๊ธฐ์กด ๋™์ž‘์„ ์ „ํ˜€ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์ด๊ฒƒ์€ ํƒ€์ดํ•‘์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฝ”๋“œ ์„œ์‹์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ์ฝ˜์†”์ด ์•„๋‹Œ ์Šคํฌ๋ฆฝํŒ… ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•œ ์•ฝ์† ์ค‘ ํ•˜๋‚˜๋Š” ์Šคํฌ๋ฆฝํŠธ(์˜ˆ์ œ ๋“ฑ)์—์„œ ์ฝ˜์†”์— ๋ถ™์—ฌ๋„ฃ๊ณ  ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” emdash ๋“ฑ์˜ ๋‹จ์–ด ๋ฌธ์„œ์—์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ๋‹จ์—ฐ์ฝ” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์žฌ์‚ฌ์šฉ ํ˜•์‹์ž…๋‹ˆ๋‹ค(์ด๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค)

์˜ค๋ฅธ์ชฝ. ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ํ˜„์žฌ PSReadLine์˜ Ctrl+V์— ๋ถ™์—ฌ๋„ฃ๋Š” ๋™์•ˆ์—๋งŒ _์™„์ „ํžˆ_ ์ฐธ์ด๋ฉฐ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์„ ํ†ตํ•˜์ง€ ์•Š๊ณ  ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋„ ์ž‘๋™ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ์ค„ ๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ReadLine์ด ํ•„์š”ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ PowerShell 5+์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด PSReadLine์ด _์—†๋Š”_ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ _์ด๋ฏธ_ ์žˆ๋Š” ๊ฒฝ์šฐ(if/else, try/catch, ์ฃผ์„, Allman ์ค‘๊ด„ํ˜ธ ๋“ฑ)๊ฐ€ ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์—๋Š” PSReadLine์ด ์•„๋‹Œ ํ˜ธ์ŠคํŠธ์˜ ๋ฌธ์ œ ๋ชฉ๋ก์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ๋Š” ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฐ ์ด์œ ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ด ๊ตฌ๋ฌธ์€ PowerShell 4 ๋˜๋Š” 5์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ISE ๋˜๋Š” PSReadline์ด ์•„๋‹Œ ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ {{not-our-problem}}์— ๋ถ™์—ฌ๋„ฃ๋Š” _๋”_๋งŽ์€_ ๋ฌธ์ œ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๋Š” ๋ฐ ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด _์ €๋ฅผ ์กฐ๊ธˆ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค_ ํ•˜์ง€๋งŒ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ตฌ๋ฌธ์ด๋ผ๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•ด์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. PowerShell ๋ฒ„์ „...

์ถ”์‹ : ์ €๋Š” BestPractices ๊ฐ€ Stroustrup ๋˜๋Š” Allman๋ณด๋‹ค OTBS๋ฅผ ์„ ํƒ ํ•˜๋Š” ์ •๋‹นํ™” ์ค‘ ํ•˜๋‚˜๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์ง€๊ธˆ ์ฑ…์—์„œ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ํ™•์‹คํžˆ ์ฐธ์กฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์žฅ์™ธ ๋งˆ๊ถŒ ๋ฐœ๋งค์†Œ์™€ ํ•จ๊ป˜ ์‚ฌ๋ผ ์ข‹๊ฒ  ์ •๋ง ์˜ค๋ž˜๋œ. DSL์€ ํ›จ์”ฌ ๊ฐ„๋‹จํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

OTBS๋Š” ๋ฌผ๋ก  One True Way์ž…๋‹ˆ๋‹ค....

@BrucePay- ์—ฌ์ „ํžˆ ์—ฌ๋Ÿฌ ์ค„ ๋ช…๋ น์ค„์„ ๋ถ™์—ฌ๋„ฃ๊ณ  Ctrl+v๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์€ ์•„๋‹ ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๊ณ  ์ ์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ์ด๋‚˜ Alt+์ŠคํŽ˜์ด์Šค๋ฐ” ์—†์ด ๋ถ™์—ฌ๋„ฃ๊ธฐ

์ด ๋ณ€ํ™”๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ตœ์†Œํ•œ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ณ  ์–ด๋–ค์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค... ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”์— ๋”ฐ๋ผ ์•ฝ๊ฐ„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํ—˜ ํ”Œ๋ž˜๊ทธ ๋’ค์— ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ •๋ง๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ์ด๊ฒƒ์€ ํ˜„์žฌ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์–ด๋–ค ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ƒˆ๋กœ์šด ๊ฒฝํ—˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํŒŒ์ดํ”„ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ์ฆ‰๊ฐ์ ์ธ ์˜ค๋ฅ˜๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ˜„์žฌ ์ด์Šค์ผ€์ดํ”„๋œ ์ค„ ๋ฐ”๊ฟˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š” ์ฝ”๋”ฉ ํŒจํ„ด์ด ์•„๋‹™๋‹ˆ๋‹ค . ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ •๋ง... ์—ฌ๊ธฐ์„œ ์žƒ์„ ๊ฒƒ์€ ์—†๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

diff --git a/src/System.Management.Automation/engine/parser/Parser.cs b/src/System.Management.Automation/engine/parser/Parser.cs
index a31f64fa0..37b897f7c 100644
--- a/src/System.Management.Automation/engine/parser/Parser.cs
+++ b/src/System.Management.Automation/engine/parser/Parser.cs
@@ -5653,6 +5653,11 @@ namespace System.Management.Automation.Language
                 }

                 pipeToken = PeekToken();
+                if (pipeToken.Kind == TokenKind.Newline)
+                {
+                    SkipNewlines();
+                    pipeToken = PeekToken();
+                }

                 switch (pipeToken.Kind)
                 {

๋‹น์‹  ๋ง์ด ๋งž์•„์š”. ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ํ˜„์žฌ ํŒŒ์„œ๊ฐ€ ์ค„ ๋ฐ”๊ฟˆ์˜ ์ˆ˜์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๋ช…๋ น๋ฌธ ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ž ์žฌ์ ์ธ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํฅ๋ฏธ๋กœ์šด ํผ์ฆ์„ ์ฃผ์…จ์–ด์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ’–

์ด์™€ ๊ฐ™์€ ์Šค๋ ˆ๋“œ๋Š” PowerShell ์˜คํ”ˆ ์†Œ์‹ฑ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์ ธ๋‹ค์ค€ ์—„์ฒญ๋‚œ ์ด์ ์„ ์‹ค์ œ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ œํ’ˆ ํŒ€, MVP, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ์› ๋ฐ ์ด์™€ ๊ฐ™์€ ์–ธ์–ด๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ํ›Œ๋ฅญํ•˜๊ณ  ๊ณต๊ฐœ์ ์œผ๋กœ ํ† ๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ™˜์ƒ์ ์ด๋‹ค. ์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ @Jaykul ์˜ ์‘๋‹ต์„ ์ธ์šฉ

์œ„์—์„œ @Jaykul์ด ๋งํ•œ ๊ฒƒ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์€ ๋ช…๋ น์˜ ์—ฐ์†์ด ์ค„์˜ ๋์ด ์•„๋‹Œ ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์ฝ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@RichardSiddaway ๊ทธ๊ฒƒ์€ ๊ฐ€๋…์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋ก€ ๋ฐ ์Šคํƒ€์ผ ์ €์žฅ์†Œ์˜ ์ค„ ๋ฐ”๊ฟˆ์— ๋Œ€ํ•œ ํ† ๋ก ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ์ค„ ๋์—์„œ ๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์ด๋Ÿฐ ์‹์œผ๋กœ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ค„์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์œผ๋กœ ํŒŒ์ดํ”„ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠนํžˆ ์ค„์ด ๊ธธ๊ณ  ๋์—์„œ ํŒŒ์ดํ”„๋ฅผ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์—ฐ์†์ด๋ผ๋Š” ๊ฒƒ์„ _์ •๋ง_ ๋ถ„๋ช…ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path |
    Get-Item | Where FullName -match "AppData" | 
    Sort FullName -Unique

๋Œ€

Get-Process | Where CPU | Where Path
    | Get-Item | Where FullName -match "AppData"
    | Sort FullName -Unique

๋„ค, ์•ž์œผ๋กœ๋„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path
    | Get-Item | Where FullName -match "AppData"
    | Sort FullName -Unique

์กฐ๋งŒ๊ฐ„ ๋˜ ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”. ํฅ๋ฏธ๋กœ์šด ํผ์ฆ์ด์ง€๋งŒ ์•„์ง ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ž˜ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜•

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๋‹ค๋Š” ์  ์—์„œ

๋‚˜๋Š” ๋˜ํ•œ ์ค„ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ค„ ์—ฐ์† ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” _์˜ต์…˜_์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๋Š” @RichardSiddaway์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•œ ์ฝ”๋”ฉ์„ ์ ๊ทน ์˜นํ˜ธํ•˜๋ฏ€๋กœ ๋“ค์—ฌ์“ฐ๊ธฐ(์ฆ‰, ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์‹ค์ œ๋กœ ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์˜ ๋ชจ์–‘์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์ง€๋งŒ(์ €๋Š” ๋ณด๊ธฐ์— ๋ณด๊ธฐ ํ‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)) ๋ชจํ˜ธํ•จ์„ ์—†์• ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค๋ฉด ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์–ด์ ฏ๋ฐค ๋‚˜๋Š” ํŒŒ์„œ๋ฅผ ๋งŒ์ง€๊ณ  ์‹ถ์€ ๊ธฐ๋ถ„์ด ๋“ค์—ˆ๊ณ , ์ด๊ฒƒ์€ ํ•ญ์ƒ ๋‚˜๋ฅผ ๊ดด๋กญํ˜”๋‹ค( ๋‚˜๋Š” ํ•ญ์ƒ ๋ผ์ธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ํŒŒ์ดํ”„๋ฅผ ์„ ํ˜ธํ–ˆ๋‹ค ). ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

image

๋‚ด๊ฐ€ ๊ฐ€์ง„ ์œ ์ผํ•œ ์งˆ๋ฌธ์€ ์ด๊ฒƒ์ด ์‹คํ—˜์  ํ”Œ๋ž˜๊ทธ ๋’ค์— ์ˆจ๊ฒจ์ ธ์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๊ธฐ์กด ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™œ ์ „ํ˜€ ์‹คํ—˜์ ์œผ๋กœ ๋งŒ๋“œ๋‚˜์š”? ์ƒ๊ฐ?

์ด์ œ ๋ช‡ ๊ฐ€์ง€ Pester ํ…Œ์ŠคํŠธ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ...

๋™์ž‘์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์ผ๊ด€๋˜๋ฉฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹คํ—˜ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ๊ธฐ์กด์˜ ํ–‰๋™์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋””์ž์ธ์— ๋Œ€ํ•œ ๋…ผ๋ž€๋„ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€์ˆ˜์ ์œผ๋กœ PowerShell์—์„œ ๋ช…๋ น ์ด๋ฆ„์ด "-"๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋‚˜์ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐฑํ‹ฑ ์—†์ด ๊ฐœํ–‰์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ž˜ํ•‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์Šคํ”Œ๋ž˜ํŒ…์ด ์žˆ์ง€๋งŒ ๋ช…๋ น ์ด๋ฆ„์ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด Intellisense ๋ฐ ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Get-AzureRmAppServicePlanMetrics
    -ResourceGroupName Default-Web-WestUS
    -Name ContosoWebApp
    -StartTime 2016-11-30T22:00:00Z
    -EndTime 2016-11-30T22:30:00Z
    -Granularity PT1M
    -Metrics Requests

๋‚˜๋Š” ์Šคํ”Œ๋ž˜ํ„ฐ ๊ฐ™์€ ์†ํŽธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์ง€๋งŒ ํ™•์‹คํžˆ ์ฒซ ๋ฒˆ์งธ ์บ๋ฆญํ„ฐ๋กœ ๊ฐ–๋Š” ์˜ต์…˜์ด ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋Œ€ํ™”ํ˜•๊ณผ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅด์ง€๋งŒ PowerShell์ด โ€‹โ€‹์ด๋ฏธ ์žˆ๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ง„ ์œ ์ผํ•œ ์งˆ๋ฌธ์€ ์ด๊ฒƒ์ด ์‹คํ—˜์  ํ”Œ๋ž˜๊ทธ ๋’ค์— ์ˆจ๊ฒจ์ ธ์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๊ธฐ์กด ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™œ ์ „ํ˜€ ์‹คํ—˜์ ์œผ๋กœ ๋งŒ๋“œ๋‚˜์š”? ์ƒ๊ฐ?

์ง€๋‚œ๋ฒˆ์— MSFT ํŒ€์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ์ˆ˜๋™์ ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ—˜์  ํƒœ๊ทธ ์•„๋ž˜์— ์žˆ์œผ๋ฉด ๋น ๋ฅด๊ฒŒ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ powershell.config.json์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PowerShell์—์„œ ๋ช…๋ น ์ด๋ฆ„์ด "-"๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋‚˜์ฉ๋‹ˆ๋‹ค.

์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ˜ธ์—์„œ ์ถฉ๋ถ„ํžˆ ๋…ผ์˜ํ•ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

"๋นˆ ํŒŒ์ดํ”„ ์š”์†Œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ๋”ฐ๋ผ์„œ ํŒŒ์ดํ”„๊ฐ€ ์ค„ ์—ฐ์†๊ณผ ๋‹ค์Œ ์ค„ ์‹œ์ž‘์— ๋™์‹œ์— ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Get-Process | Where CPU | Where Path |
    | Get-Item | Where FullName -match "AppData" |
    | Sort FullName -Unique

๋งŽ์€ ๋ถˆ๋งŒ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑํ‹ฑ ์—†์Œ, ์—ฐ์†์„ฑ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ค„ ์‹œ์ž‘ ๋ถ€๋ถ„์— ํŒŒ์ดํ”„; ์—ฐ์† ํ–‰์ด ์˜ˆ์ƒ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ํ–‰์„ ์ž…๋ ฅํ•œ ํ›„ ๋Œ€ํ™”์‹ ํ”„๋กฌํ”„ํŠธ ๋™์ž‘์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์•ฝ๋œ || ์—ฐ์‚ฐ์ž๋Š” ์—ฌ๋Ÿฌ ์ค„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋ฐฑํ‹ฑ๊ณผ ํŒŒ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ด์ƒ ํƒ€์ดํ•‘์ด ์•„๋‹™๋‹ˆ๋‹ค. Jaykul์˜ if/else , try/catch ์˜ˆ์ œ์— ๋”ฐ๋ผ ์‚ฌ์ด์— ์ฃผ์„ ์ค„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@HumanEquivalentUnit - ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์ž๋กœ์„œ cmdline ์‚ฌ์šฉ์„ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ์ค„ ๋ฐ”๊ฟˆ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ž‘๋™ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€ ์•Š์€ ํ•œ ์ค„๋กœ ๋‚จ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ œ์•ˆ์˜ ํŒฌ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ IMO
๊ฐ€ํ˜นํ•ด ๋ณด์ธ๋‹ค

Get-Process | Where CPU | Where Path |    | Get-Item | Where FullName -match "AppData" |    | Sort FullName -Unique

์–ด๋Š

@kilasuit ํŽธ์ง‘ํ•œ ๋ผ์ธ์ด ์ด์ƒํ•ด ๋ณด์ด์ง€๋งŒ(์ €

Get-Process | Where CPU | Where Path `    | Get-Item | Where FullName -match "AppData" `    | Sort FullName -Unique

์ œ๊ฒŒ ๋ฌป๋Š”๋‹ค๋ฉด, ์†”์งํžˆ ๋งํ•ด์„œ Kirk์˜ PR์ด ํ™˜์˜๋ฐ›๋Š” ๋ถ„๋ช…ํ•œ ์ด์œ ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ฐฑํ‹ฑ์ด๋‚˜ ์ถ”๊ฐ€ ํŒŒ์ดํ”„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„ ๋ผ์ธ์„ ์‘์ถ•ํ•  ๋•Œ ๋งค์šฐ ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ์š”์ฒญ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ https://github.com/PowerShell/PowerShell-RFC/pull/179์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰