2017-09-22 5 views
1

Ich möchte überprüfen, ob eine Datei mit [ -f "$1" ] existiert, aber es funktioniert nicht. Der Befehl arbeitet mit normalem Text wie [ -f "filename.xml" ].Bash-Bedingung mit Shell-Variable

Ich echote $1, die zum Beispiel filename.xml ist. Irgendwelche Ideen?

sourcePath=/SPECIFICPATH/${1}; 
echo $sourcePath; 
echo $1; 

find /EXAMPLEPATH -name pages -type d -execdir bash -c 'cd pages && [ -f "$1" ] && pwd && cp $sourcePath .' \; 

Ich arbeite in Automator mit einem Shell-Skript-Block.

Antwort

2

Sie rufen eine komplett neue Shell mit bash -c … auf, also müssen Sie $1 mitgehen. Selben mit $sourcePath, wenn es nicht exportiert wird.

find /EXAMPLEPATH -name pages -type d -execdir bash -c 'cd pages && [ -f "$1" ] && pwd && cp "$2" .' bash "$1" "$sourcePath" \; 

(In bash -c … bash "$1" "$sourcePath" ist die zweite bash$0.)

+0

Ryan vielen Dank! Das hat mich wirklich Stunden gerettet .. wie Sie sehen, ich bin sehr neu zu bash und ich hätte nie in dieser Richtung gedacht .. normalerweise habe ich diesen Befehl im Terminal .. aber jetzt versucht, in einem Automator-Prozess zu integrieren .. was nun endlich funktioniert =) danke nochmal und hab ein tolles wochenende – Marco

1

für die Sub-Shell gibt es keine Notwendigkeit, wenn Sie einen Teil der Logik auf den Befehl find bewegen.

find /EXAMPLEPATH -wholename "*/pages/$1" -print -execdir cp "$sourcePath" . \; 
  • -wholename entspricht eine Datei $1 in einem pages Verzeichnis mit dem Namen.
  • -print ersetzt pwd.
  • Jetzt können Sie cp direkt anrufen.