42828


**CentOS環境で、shファイルを実行したら、指定ファイルを、予め指定した複数ディレクトリへ上書きコピーしたいのですが、どう書けば良いでしょうか？**

* * *

**具体例**  
・hoge.shを実行したら、z.jsを予め指定した「/var/www/a/」と「/var/www/b/」ディレクトリ直下へ配置したい  
・その際、z.jsが既に存在してる場合は、上書き配置したい

**hoge.sh**

[code]

    ary = ['/var/www/a/','/var/www/b/']
    for((i=0;i<ary.size;i++))
    do
       cp -fa z.js  ary[i]/z.js
    done
    
[/code]


CC BY-SA 3.0
2018-03-31T06:14:37.947
42825
2018-04-07T16:49:11.703
2018-03-31T06:54:06.873
3060
7886
question
shellscript unix sh
ファイルを予め指定した複数ディレクトリへ上書きコピーしたい

[code]

    #!/bin/sh
    dirs=("/var/www/a" "/var/www/b")
    
    for dest in "${dirs[@]}"
    do
        cp -fa z.js $dest/z.js
    done
    
[/code]


CC BY-SA 3.0
2018-03-31T06:52:15.963
42828
2018-03-31T16:25:20.463
2018-03-31T16:25:20.463
3060
3060
42825
answer


`for`を使わない回答例です。

[code]

    #!/bin/bash
    set -Cu
    #set -vx # Uncomment for debugging
    
    readonly DESTS=("/var/www/a/" "/var/www/b/")
    readonly SOURCE="z.js"
    
    # 存在チェックが必要なら
    #{ echo "${DESTS[@]}" | tr " " "\n" | xargs -I@ sh -c 'test -d "$1" || { echo "$1 is not exists!" && exit 1; }' _ @; } || exit 1
    echo "${DESTS[@]}" | tr " " "\n" | xargs -I@ cp --force --archive "$SOURCE" @ 
    
    exit $?
    
[/code]

shebangが`/bin/bash`なのは`TARGETS`を設定するときに配列を使うほうが見た目に分かりやすいかなと思ったからです。  
なので`TARGETS="/var/www/a/ /var/www/b/"`でも構わないなら`/bin/sh`で動きます。


CC BY-SA 3.0
2018-03-31T07:11:49.020
42829
2018-03-31T07:11:49.020
25936
42825
answer


配列より変数に入れた単語のリストのほうがより簡素で自然かなと思います。

[code]

    #!/bin/sh
    LIST="/var/www/a/ /var/www/b/"
    for d in $LIST
    do
       cp -fa z.js $d/z.js
    done
    
[/code]


CC BY-SA 3.0
2018-04-07T16:49:11.703
43042
2018-04-07T16:49:11.703
5008
42825
answer