LoginSignup
1
0

More than 3 years have passed since last update.

Windowsではxargsではなくwhileを使う

Last updated at Posted at 2019-07-29

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

現場からは以上です

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0