ååãŸã§ã«ãLinuxã®ã³ãã³ãããã£ãã颿°åããŠPowerShellããå©çšã§ããããã«ãããLinuxã®ç°å¢å€æ°PATHã«å«ãŸããŠããã³ãã³ããèªåçã«é¢æ°åããã®ã§ãã»ãŒå šãŠã®ã³ãã³ãã«å¯Ÿå¿ããç¹ããã€ã³ãã ã該åœéšåã®ã¹ã¯ãªããã¯æ¬¡ã®ããã«ãªã£ãŠããã
$_linux_path = (wsl echo '$PATH').Split(":") -NotMatch "/mnt"
$_linux_command_names = wsl ls $_linux_path
# Generate Linux command functions
ForEach($n in $_linux_command_names) {
if ($n -ne "") {
$_linux_functions += "
function $n {
if (`$Input.Length) {
`$Input.Reset()
`$Input | wsl $n `$(_path_to_linux `$Args)
}
else {
wsl $n `$(_path_to_linux `$Args)
}
}"
}
}
æã®éãæ¹ãªããã§ã«ãæ°ã¥ãããšæããããã®ã¹ã¯ãªããã¯ç°å¢å€æ°PATHã®åªå é äœãèæ ®ããŠããªããäžèšã®å Žåãç°å¢å€æ°PATHã¯ã/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binãã®ãããªå€ãèšå®ãããŠããã®ã§ããŸã/usr/local/sbin以äžãæ€çŽ¢ããæ¬¡ã«/usr/local/bin以äžãæ€çŽ¢ãâŠâŠãšãã£ãããã«ã³ãã³ãæ€çŽ¢ãè¡ãããŠããã
äžèšã®ã¹ã¯ãªããã§ã¯é äœãèæ ®ãããã³ãã³ãåã ãã§åŠçãããŠããã®ã ããã³ãã³ãã®å®è¡æã«ãã«ãã¹ãæå®ããŠããªãã®ã§çµå±Linuxã®ç°å¢å€æ°PATHã®çµæãåæ ãããã³ãã³ããå®è¡ããããšããâçµæãªãŒã©ã€âã®å 容ã«ãªã£ãŠããã®ã ãä»åã¯ããã®éšåãå³å¯ã«å®è¡ããããã«æžãæããŠããããPowerShellã¹ã¯ãªããã®ãµã³ãã«ãšããŠè峿·±ãã®ã§ããã²ãã®æµãã远ã£ãŠã¿ãŠããã ãããã
ã¢ã€ãã¢ã¯ã·ã³ãã«
å³å¯ã«åŠçããããã®èãæ¹ã¯ã·ã³ãã«ã ã
- ã³ãã³ãäžèЧãç°å¢å€æ°PATHã®åªå 床ãå å³ãããã®ã«å€æŽãã
- ã³ãã³ãäžèЧã¯ãã«ãã¹ã§çšæãã
- 颿°ã¯ãã«ãã¹ã§ã³ãã³ããå®è¡ãã
ãã®ã¹ã¯ãªããã¯å
šãŠã®Linuxã³ãã³ãã«å¯ŸããŠåå¥ã«é¢æ°ãäœæãããšããäœæŠãåã£ãŠããã颿°ã¯åŸã«å®çŸ©ããããã®ãå
ã«å®çŸ©ããããã®ãäžæžããããã€ãŸããåªå
é äœã®é«ãã³ãã³ãã»ã©åŸãåŽã§é¢æ°å®çŸ©ããã°ããããã ãä»åã¯ããããå®è£
ããŠã¿ããã
PATHã®é åºãéé ã«ãã
Linuxã®ç°å¢å€æ°PATHã¯åªå é äœã®é«ããã¹ã»ã©åã«èšèŒããæ±ºãŸãã«ãªã£ãŠãããæ¬é£èŒã§äœæããèšå®ã¹ã¯ãªããã§ã¯ç°å¢å€æ°PATHããSplit(â:â)ãã§åè§£ããŠé åã«å ¥ããåŠçããããŠããªãã®ã§ãé åã®æåã®ã»ãã«åªå é äœã®é«ããã¹ãå ¥ã£ãŠããããšã«ãªãã
ãããã颿°å®çŸ©ã§åªå é äœã®é«ãã»ããåŸãã§å®çŸ©ããããããã«ã¯ãé åã®äžèº«ãé転ãããŠãåªå é äœã®é«ããã¹ã»ã©æåŸã«æã£ãŠãããã°ããã
ããæ¹ã¯ããã€ãããããããã§ã¯åçŽã«ã€ã³ããã¯ã¹ã®æå®ãé転ãããæ¹æ³ã§æžãŸããããããã°ã©ãã³ã°ã®çµéšãããæ¹ãªãããããšæãããå€ã®äžèº«ãæžãæãããšã»ãã®éšåã§åé¡ãåºãããšããããåé¡ãåºãªãããã«ããããã«ãã»ãã®éšåã®ãœãŒã¹ã³ãŒããèªãŸãªããšãããªãã®ã§é¢åã ãããšãã£ãŠãå¥ã®å€æ°ã«å²ãåœãŠããšå€æ°ãå¢ããŠãããã¯ããã§ç ©éã«ãªãã倿°ãå¢ãããã倿°ãæžãæããã«ç®çãéæã§ãããšãããã°ã©ã ãæžãåŽãšããŠã¯å®å¿ã§ããã
PowerShellã®å Žåãé åã®ã€ã³ããã¯ã¹ãéã«æå®ããã°é åã®äžèº«ãé転ãããããšãã§ãããã€ã³ããã¯ã¹ãã($_linux_path.length-1)..0ãã®ããã«æå®ããŠãããšããããã€ã³ãã ããããªãé åã®äžèº«ã¯æžãå€ãããªãããæ°ãã倿°ãäœããªãã§æžãã
ã³ãã³ãåããã«ãã¹ã§åŸã
ã³ãã³ãããã¡ã€ã«åã ãã§ã¯ãªããã«ãã¹ã§åŸããããããããã€ãã®æ¹æ³ãããããã·ã³ãã«ã«ãŸãšãããªãlsã³ãã³ãããls -d /path/to/*ãã®ããã«äœ¿ãæ¹æ³ãããã ããã以äžã«ç€ºãã®ã¯ããls -d /sbin/*ããå®è¡ããçµæã ããã³ãã³ãããã«ãã¹ã§ååŸã§ããŠããããšããããã
å ã»ã©ç°å¢å€æ°PATHãé åã«å ¥ãããã®ãéé ã«ããæ¹æ³ã玹ä»ãããããã®ãã¹ã®æåŸã«ã/*ããå ããŠlsã³ãã³ãã«æµã蟌ãã°ããls -d *ãã«ãããã«ãã¹äžèЧãåŸããããé åã«ã¯åå¥ã«ãã£ã¬ã¯ããªãã¹ã®æååãåããããŠããããã ããããããŸãšããŠåŠçããããšããã ã
PowerShellã§ã¯ãã-replaceãã䜿ããšãããå®çŸããããšãã§ãããã-replaceãã¯æ£èŠè¡šçŸã䜿ããã®ã§ãæ«å°Ÿã/*ã«çœ®æããšããåœä»€ãæå®ããã°ãé åã®äžèº«ãåã ã«åŠçããããšãã§ãããæ¬¡ã«å®è¡äŸã瀺ãã
ã$_linux_path[($_linux_path.length-1)..0]ããéé ã«ãªã£ãã³ãã³ããã¹äžèЧã§ãããããã«ã-replace â$â,â/*âãã®æå®ã§æ«å°Ÿãã/*ãã«å€æã ãã$_linux_path[($_linux_path.length-1)..0] -replace â$â,â/*âãã§å€æå®äºã§ãããé åã«å¯ŸããŠäžçºã§åŠçãå®äºããã®ã§ã¹ã¯ãªãããã·ã³ãã«ã«ãªãã
ãšã©ãŒã¡ãã»ãŒãžãæšãŠã
ãããŸã§æºåãã§ããã®ã§ãå®éã®ã¹ã¯ãªããã«èœãšã蟌ãã§ãã£ãŠã¿ãããå®éã«åãããŠã¿ããšãå®ã¯æ¬¡ã®ãããªãšã©ãŒãçºçããã
ããã¯Linuxã®ç°å¢å€æ°PATHã«å«ãŸããŠãããã£ã¬ã¯ããªãã¹ãå®éã«ã¯ååšããŠãªããšããååšããŠããŠã1ã€ãã³ãã³ããååšããŠããªããšãã«çºçãããšã©ãŒã ãã°ããå±éã®å¯Ÿè±¡ãšãªããªãã®ã§ãã*ããã*ãã®ãŸãŸæ®ã£ãŠããŸãã/usr/local/games/*ãšãããã¡ã€ã«ã¯ååšããªãããšãããšã©ãŒã«ãªã£ãŠããŸãã®ã ã
ãšãããããã®ãŸãŸåŠçãé²ããŠã¿ããããŸããå®è¡çµæã次ã®ããã«å€æ°ã«ä»£å ¥ããŠã¿ãã
倿°ã«ãšã©ãŒã¡ãã»ãŒãžã¯å ¥ã£ãŠããããã³ãã³ããå®è¡ãããšãã«æšæºãšã©ãŒåºåã«åºãŠããããšããããã
PowerShellãèµ·åãããã³ã«ãã®ãšã©ãŒãåºãŠããŠã¯é¢åã ãæ¬¡ã®ããã«åŠçãæžãæããŠããšã©ãŒã¡ãã»ãŒãžã ããã$nullããžæµã蟌ãã§æ¶ãããã«ããã
ã¡ãªã¿ã«ãã2> $nullãã§ãšã©ãŒã¡ãã»ãŒãžã ãæšãŠããšããã®ã¯ããããåŠçãªã®ã§èŠããŠãããšããã ããã
æ¹è¡ããŠã³ã³ãã¯ãã«
å ã»ã©ã®åŠçã§æ¬²ãããã«ãã¹ã®ã³ãã³ãäžèЧã¯åŸãããã®ã ãããã®ããã®ã³ãŒããé·ããªã£ãŠããŸã£ããæè¿ã¯ã¹ã¯ãªãŒã³ã®ãµã€ãºã倧ããã®ã§ã以åã»ã©å³å¯ã«è¡å¹ ã®å¶éãææãããããšã¯ãªããªã£ãŠãããã1è¡ãé·ããªãããããšåŸããèªãã ãšãã«ãããã«ãããªããããçšåºŠã¯æãç³ã¿ãã³ã³ãã¯ããªãœãŒã¹ã³ãŒãã«ããŠãããããã©ãã§æãç³ããïŒæ¹è¡ã§ããïŒã®ãç¥ã£ãŠããããšã¯èŠéãã®ããã¹ã¯ãªãããæžãäžã§éåžžã«éèŠã ã
ãŸããPowerShellã§ã¯ã(ãã®åŸã§æ¹è¡ããããšãã§ãããæ¬¡ã®ãããªæãã ã
ä»åã®ã±ãŒã¹ã ãšããã§ããŸã ã¡ãã£ãšé·ããã(ãã§æ¹è¡ã§ãããšããããšã¯ãã)ãã®åã§ãæ¹è¡ã§ããã2ã«ææ¹è¡ãããšã次ã®ããã«ãªãã
ä»åã®æžãæãã¯ãããŸã§ã®ã¹ã¯ãªããã«å¯ŸããŠäœã®å€åãäžããŠããªããæ°ããã$_linux_command_pathsããšãã倿°ã远å ããã ãã ãããããèŠé ã§å€æŽãããŠãããšãæ¢åã®èšå®ã«ã¯åœ±é¿ãäžããã«ãåŸã ã«æžãæããŠããããšãã§ããã
ä»åã®æžãæã
ä»åæžãæããéšåãæ¬¡ã«ãŸãšããŠãããæ¬¡åã¯ãã»ãã®éšåã«ãæãå ããäºå®ã ã
$_linux_path = (wsl echo '$PATH').Split(":") -NotMatch "/mnt"
$_linux_command_names = wsl ls $_linux_path
$_linux_command_paths = (
wsl ls -d ($_linux_path[($_linux_path.length-1)..0] -replace "$","/*")
) 2> $null
# Generate Linux command functions
ForEach($n in $_linux_command_names) {
if ($n -ne "") {
$_linux_functions += "
function $n {
if (`$Input.Length) {
`$Input.Reset()
`$Input | wsl $n `$(_path_to_linux `$Args)
}
else {
wsl $n `$(_path_to_linux `$Args)
}
}"
}
}
å®è¡ããŠã¿ããšã次ã®ããã«æ°ããäœæãã倿°ã«ç®çãšããããŒã¿ãåããããŠããããšã確èªã§ããã
åŠçãšããŠã¯1è¡è¿œå ããã ãã ããä»åã®ã¹ã¯ãªããã«ã¯æ¬¡ã®ãã¯ããã¯ãçã蟌ãŸããŠãããåèã«ãªãã¯ãã ã
- é åã®äžèº«ãéé ã§äœ¿ãæ¹æ³
- é åã®äžèº«ã«å¯ŸããŠåã ã«æåå眮æã宿œããæ¹æ³
- æåå眮æãæ£èŠè¡šçŸã§æå®ããæ¹æ³
- ãšã©ãŒã¡ãã»ãŒãžãæšãŠãæ¹æ³
- å®è¡çµæã倿°ãªã©ã«ä»£å ¥ããã«ãã®ãŸãŸå©çšããæ¹æ³
PowerShellã®ç¹åŸŽã®1ã€ã¯ãã·ã§ã«ã¹ã¯ãªããã§ãããªãããããã°ã©ãã³ã°èšèªãšããŠé«ãæœè±¡åãè¡ãããŠããç¹ã«ãããããããé«ãæœè±¡æ§ã掻çšããªããã³ã³ãã¯ãã«æžããŠãããã®ããPowerShellã¹ã¯ãªããã®è¯ããšããã ã
ä»é²: $PROFILE
æ¬é£èŒã§å©çšããŠããçŸæç¹ã®$PROFILEãæ¬¡ã«æ²èŒããŠãããåèã«ããŠããããã°å¹žãã ã
#========================================================================
# Definition of Linux commands used via wsl
#========================================================================
$_linux_path = (wsl echo '$PATH').Split(":") -NotMatch "/mnt"
$_linux_command_names = wsl ls $_linux_path
$_linux_command_paths = (
wsl ls -d ($_linux_path[($_linux_path.length-1)..0] -replace "$","/*")
) 2> $null
# Generate Linux command functions
ForEach($n in $_linux_command_names) {
if ($n -ne "") {
$_linux_functions += "
function $n {
if (`$Input.Length) {
`$Input.Reset()
`$Input | wsl $n `$(_path_to_linux `$Args)
}
else {
wsl $n `$(_path_to_linux `$Args)
}
}"
}
}
$_linux_functions += @'
function _path_to_linux {
$linuxpath = @()
# Convert arguments to Linux path style
ForEach($winpath in $Args) {
if ($winpath -eq $null) {
Break
}
# Change drive path to mount path
if ($winpath -match '^[A-Z]:') {
$drive = $winpath.Substring(0,1).ToLower()
$linuxpath += "/mnt/" + $drive + $winpath.Substring(2).Replace('\','/')
}
# Option is not converted
elseif ($winpath -match '^[-+]') {
$linuxpath += $winpath
}
# Other argument is converted
else {
$linuxpath += ([String]$winpath).Replace('\','/')
}
}
$linuxpath
}
'@
# Prepare temporary file path with extension .ps1
$_temp = New-TemporaryFile
$_temp_ps1 = $_temp.FullName + ".ps1"
Remove-Item $_temp
# Write function definition to temporary .ps1 file and parse
$_linux_functions | Out-File $_temp_ps1
. $_temp_ps1
Remove-Item $_temp_ps1
# Delete unnecessary variables
Remove-Variable _temp
Remove-Variable _temp_ps1
#Remove-Variable _linux_path
#Remove-Variable _linux_command_names
#Remove-Variable _linux_command_paths
#Remove-Variable _linux_functions
#========================================================================
# Individual Linux command function definitions
#========================================================================
# grep
function grep {
$pattern_exists = $False
$path_exists = $False
$skip = $False
$i = 0
ForEach($a in $Args) {
if ($skip) {
$skip = $False
$i++
continue
}
# Options without argumetn
if ($a -cmatch '^-[abcdDEFGHhIiJLlmnOopqRSsUVvwxZ]') {
}
# Options with argument
elseif ($a -cmatch '^-[ABC]') {
$skip = $True
}
# Pattern file specification option
elseif ($a -ceq '-f') {
$skip = $True
$pattern_exists = $True
$Args[$i+1] = _path_to_linux $Args[$i+1]
}
# Pattern specification option
elseif ($a -ceq '-e') {
$skip = $True
$pattern_exists = $True
}
# Pattern or file path
elseif ($a -cnotmatch '^-') {
if ($pattern_exists) {
$path_exists = $True
}
else {
$pattern_exists = $True
}
}
$i++
}
# Change file path
if ($path_exists) {
$Args[-1] = _path_to_linux $Args[-1]
}
$Input | wsl grep $Args
}
# ls
Get-Alias ls *> $null && Remove-Item alias:ls
function ls { wsl ls --color=auto $Args }
function ll { ls -l }
function la { ls -a }
#========================================================================
# Alias definition
#========================================================================
Set-Alias -Name open -Value explorer
Set-Alias -Name edge -Value "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
Set-Alias -Name chrome -Value "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"








