2016-07-26 8 views
0

Ich möchte/bin/bash (möglicherweise/bin/sh) mit der Option -f an das Skript übergeben und von ihm behandelt werden. GenauVerwenden Sie Bash mit Skript-Text von stdin und Optionen von der Befehlszeile

while getopts f OPT 
do 
    case $OPT in 
    "f") readonly FLG_F="TRUE" 
    esac 
done 

if [ $FLG_F ]; then 
    rm -rf $KIBRARY_DIR 
fi 

und wann sind diese Zeilen in einer Datei http://hoge.com/hoge.sh,

ich das tun kann, zum Beispiel,

wget http://hoge.com/hoge.sh 
/bin/bash hoge.sh -f 

aber

/bin/bash -f hoge.sh 

nicht weiß ich, der Grund, aber ich möchte so tun,

wget -O - http://hoge.com/hoge.sh | /bin/bash 

mit Option -f für hoge.sh nicht für/bin/bash

Gibt es gute Möglichkeiten, dies zu tun?

/bin/bash <(wget -O - http://hoge.com/hoge.sh) -f 

gearbeitet. aber das ist nur für Bash Benutzer, oder?

+1

BTW, Sie haben einige Zitate Fehler hier - versuchen Sie, Ihren Code über http://shellcheck.net/ –

+0

Ohmy, .... danke für alles .. – kensuke1984

+0

Auch, '-f 'ist nicht die einzige Möglichkeit, 'FLG_F' zu setzen; Der Wert kann von der Umgebung übernommen werden. Versuchen Sie 'FLG_F = TRUE bash hoge.sh'. Sie sollten den Wert von 'FLG_F' im oberen Bereich Ihres Skripts löschen, bevor Sie nach der Option' -f' suchen. – chepner

Antwort

3

Mit bash Sie

wget -O - http://hoge.com/hoge.sh | /bin/bash -s -- -f 

wie mit -s Befehle tun können, werden von der Standardeingabe gelesen. Mit dieser Option können auch die Positionsparameter eingestellt werden. Es sollte auch mit anderen POSIX-Shells funktionieren.

+0

Es hat funktioniert. Vielen Dank auch Sie dachte POSIX Im kümmert sich .. schätzen es .. – kensuke1984

+0

Dies ist eine schlechte Idee aus verschiedenen Gründen; Sie wissen nicht, was Sie von "hoge.com" bekommen, bevor Sie es ausführen. – chepner