å®ã¯åããªããªã£ãLinuxã³ãã³ã
ååãŸã§ã«æ¬é£èŒã§è§£èª¬ããŠããèšå®ã§ãWindowsããLinuxã®ã³ãã³ãã®ã»ãšãã©ããã€ãã£ãã³ãã³ãã®ããã«åŒã³åºãããšãã§ããããã«ãªã£ãïŒããã«èŠããããŠããïŒã®ã ããå®ã¯ãããã®å€æŽã«ãã£ãŠéã«åäœããªããªã£ãã³ãã³ãããããäŸãã°ã次ã®ããã«Linuxã§åäœãããšãã£ã¿ãWindowsããå®è¡ããŠã¿ããã
äžèŠã次ã®ããã«åé¡ãªãåäœããããã«èŠããããããããã®ãšãã£ã¿ã¯å šãåå¿ããŠãããªãã
仿¹ãªãã®ã§ãLinuxåŽããåäœããŠããããã»ã¹ãç¹å®ããŠkillã³ãã³ãã§çµäºããã
LinuxåŽãã匷å¶çµäºãããšå¶åŸ¡ãæ»ã£ãŠããããããšã次ã®ããã«ã¿ãŒããã«ã«ãšãã£ã¿ãæäœããããšããŠå ¥åããããŒãåºåãããããšã確èªã§ããã
ããã¯ããããŸã§ã®èšå®å€æŽã«ãã£ãŠãšãã£ã¿ã«ãã€ãã©ã€ã³ãã€ãªãããããšã«åå ãããããšãã£ã¿ã¯ãŠãŒã¶ãŒã®å ¥åãæšæºå ¥åããåŸãã®ã ããã$Inputãã«æ¥ç¶ããŠããã®ã§ãã€ãã©ã€ã³ããã®å ¥åãåŸ ã€ããã«ãªã£ãŠããŸã£ãããããåå ã§ããŠãŒã¶ãŒã®æäœããšãã£ã¿ã«å±ããªããªã£ãã®ã ã
ä»åã¯ãã®åé¡ã解決ããŠããã€ãã©ã€ã³ã䜿ãå Žåã䜿ããªãå Žåããåé¡ãªãåäœããæ¹æ³ã玹ä»ããã
$Inputã§ãã€ãã©ã€ã³æ¥ç¶ã®æç¡ã倿ãã
ããã€ãã®ããæ¹ãèããããããããã§ã¯ç°¡åã«èªå倿°$Inputã䜿ã£ãŠå€æããããšã«ããããã€ãã©ã€ã³ãæ¥ç¶ãããå Žåãèªå倿°$Inputã«ã¯è€æ°ã®ããããã£ãèšå®ããããäŸãã°ãLengthããããã£ã ããã®ããããã£ãååšããå Žåã«ã¯ãã€ãã©ã€ã³ãæ¥ç¶ãããŠããããã®ããããã£ãååšããŠããªããã°ãã€ãã©ã€ã³ã¯æ¥ç¶ãããŠããªãããšå€æããã
PowerShellã§ã€ã³ã¿ã©ã¯ãã£ãã«åäœã確èªããŠã¿ããšããã®ä»çµã¿ã§åå䜿ããããªããšããããã
ååãŸã§ãLinuxã³ãã³ããå®éã«åŒã³åºãããã®é¢æ°ãå®çŸ©ããŠããéšåã¯æ¬¡ã®ããã«ãªã£ãŠããã
ForEach($n in $_linux_command_names) {
if ($n -ne "") {
$_linux_functions += "
function $n {
`$Input | wsl $n `$(_path_to_linux `$Args)
}"
}
}
ãã®éšåã«ã次ã®ããã«ãã€ãã©ã€ã³ã®æ¥ç¶ã®æç¡ã§åãåãåŠçã远å ããŠãããããšã«ããã
if (`$Input.Length) {
ãã€ãã©ã€ã³ããããŒã¿ãå
¥ã£ãŠããå Žå
}
else {
ãã€ãã©ã€ã³ãã€ãªãã£ãŠããªãå Žå
}
ãã ããæ³šæãå¿ èŠã ã$Inputã¯1å䜿ã£ãŠããŸããšãã䜿ããªãããµã€ã$Inputã䜿ãã«ã¯ãã$Input.Reset()ãã®ããã«ããŠäžæŠãªã»ããããå¿ èŠããããã€ãŸããåŠçãšããŠã¯æ¬¡ã®ããã«ãªãã
if (`$Input.Length) {
`$Input.Reset()
ãã€ãã©ã€ã³ããããŒã¿ãå
¥ã£ãŠããå Žå
}
else {
ãã€ãã©ã€ã³ãã€ãªãã£ãŠããªãå Žå
}
ãããå å³ãããšãWindowsããLinuxã³ãã³ããåŒã³åºãããã®é¢æ°å®çŸ©éšåã¯æ¬¡ã®ããã«å€æŽããã°ããããšã«ãªãã
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)
}
}"
}
}
ããã§ä»åã®åé¡ã¯è§£æ±ºã§ãããã ã
åäœç¢ºèª
ä»åã®èšå®ãåæ ããã$PROFILEã§åäœã確èªããŠã¿ããïŒ$PROFILEã¯çš¿æ«ã«æ²èŒããŠããïŒããŸããæ¬¡ã®ããã«æžãæãã颿°å®çŸ©ã®å 容ã確èªãããšãšãã«ãwcã³ãã³ãã«ãã€ãã©ã€ã³ã§æ¥ç¶ããŠãã€ãã©ã€ã³çµç±ã§Linuxã®ã³ãã³ããåäœããŠãããã©ããã確èªããã
åé¡ãªãåäœããŠããããšããããã颿°ã®å®çŸ©ãåé¡ãªãããã ã
次ã«ããšãã£ã¿ãèµ·åããŠãã€ãã©ã€ã³ãæ¥ç¶ãããŠããªãã±ãŒã¹ã®åäœã確èªããã
ãšãã£ã¿ãåé¡ãªãåäœããããšããããã
ãšãã£ã¿ãçµäºããŠããçµäºåŸã«æäœçšã®ããŒå ¥åãçŸããããšã¯ãªããããã§ãä»åã®åé¡ã¯è§£æ±ºã ã
åé¡ã解決ããªãã$PROFILEãè²ãŠã
ãããŸã§äœ¿ãããæ©èœã远å ããåé¡ãããã°ãã®éšåãä¿®æ£ãããšãã£ãæµãã§$PROFILEã®å 容ãè²ãŠãŠããããã ããçŸåšã®$PROFILEãããŒãã§ã¯ãããšèšãã°ãå®ã¯ããã§ããªãããŸã ãŸã èåãã§åé¡ç¹ãå€ããçµæ§ã·ãŒã ã¬ã¹ã«Linuxã®ã³ãã³ããå©çšã§ããããã«ãªã£ãŠããŠãããšã¯èšãããŸã ããã€ã課é¡ã¯æ®ã£ãŠããã
ããããèšå®ãã¡ã€ã«ãæžããŠããäœæ¥ã§ã¯ããšãããäžæ°ã«å šéšããããšããªããšããã®ãäžã€ã®ãã€ã³ãã ãå®çšã«éããŠåé¡ãæããªãã®ã§ããã°ããšãããããã®ãŸãŸã§ãããšæããæ¹åãä¿®æ£ã«ãããæéããã£ãããªãããã ãæéãååã«ãããªãããããããã§ãªããªãå¿ èŠã«è¿«ããããšãã«éœåºŠãæ¹åããæ¹æ³ããèŠããããããã®ã»ãããå¿ èŠãªèšå®ã ããã¹ãããªãšãŸãšãããã¡ã€ã«ã«ã§ããã ããã
å¿ èŠãªãšãã«å¿ èŠãªå€æŽãæ¹åãå ãããšããã®ã¯ããœãããŠã§ã¢éçºã®ã¢ãããŒãã®æ¹æ³ãšããŠã¯å€ãããããèãæ¹ã®ã²ãšã€ã§ããããç¹ã«å°ããããŒã«ãèšå®ãã¡ã€ã«ã®å Žåã«ã¯æå¹ãªã¢ãããŒãã ãšæãã®ã§ããã²è©ŠããŠããããã°ãšæãã
ä»é²: $PROFILE
æ¬é£èŒæç¹ã§ã®$PROFILEãæ¬¡ã«æ²èŒããŠãããåèã«ããŠããããã°å¹žãã ã
æ¬é£èŒæç¹ã§ã®$PROFILE
#========================================================================
# Definition of Linux commands used via wsl
#========================================================================
$_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)
}
}"
}
}
$_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_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"








