Summary
windowsでのxargsは引数に関数をもってこれない(正確にいうと export -f ができない)ので while をつかう
environment
windowsでbashを使うためにbusybox.exe
を同一フォルダに入れておく
$ ver
ver
Microsoft Windows [Version 10.0.18362.239]
$ tree
Active code page: 437
Folder PATH listing
Volume serial number is 80A0-D9ED
C:\USERS\MOCHI\SAMPLE_XARGES
bar.cmd
busybox.exe
foo.bash
foo.cmd
No subfolders exist
bashでのコード
foo.bash
# ! /usr/bin/env bash
function foo () {
echo "Hello "$1
}
function main () {
local x="nor135 ytez callmekohei"
export -f foo
echo $x | tr ' ' '\n' \
| xargs -I{} bash -c 'foo {}'
}
main
結果
Hello nor135
Hello ytez
Hello callmekohei
windowsでのコード(xargs)
foo.cmd
: <<EOF_BAT
@echo off
"%~dp0busybox.exe" bash "%~f0" %*
exit /b %ERRORLEVEL%
EOF_BAT
# ! /usr/bin/env bash
function foo () {
echo "Hello "$1
}
function main () {
local x="nor135 ytez callmekohei"
export -f foo
echo $x | tr ' ' '\n' \
| xargs -I{} bash -c 'foo {}'
}
main
結果
C:/Users/mochi/sample_xarges/foo.cmd: export
: line 19: illegal option -f
windowsでのコード(while)
bar.cmd
: <<EOF_BAT
@echo off
"%~dp0busybox.exe" bash "%~f0" %*
exit /b %ERRORLEVEL%
EOF_BAT
# ! /usr/bin/env bash
function foo () {
echo "Hello "$1
}
function main () {
local x='nor135 ytez callmekohei'
echo "$x" | tr ' ' '\n' \
| while read -r twitterID
do
foo $twitterID
done
}
main
結果
Hello nor135
Hello ytez
Hello callmekohei
現場からは以上です