base64のデコードを行おうとしているのですが、terminalで
cat [ファイル名]|base64 -D
を実行した際は想定通りなのですが、シェルで同コマンドを実行しても上記と違う結果になります。
具体的には、複数行あるファイルなのに後半部分しかないかのようにデコードされます。
同様に、tailコマンドも同様に、前半部分がないかのような扱いをされます。
ちなみにシェルは以下のように記載していて、ファイル名はsample.command
です。
shell:sample.command
1#!/bin/sh 2 3#ファイル名の空白を認識させるために設定変更をかけています。 4IFS_bak=$IFS 5IFS=$'\n' 6 7filelist=`find $tooldir -maxdepth 1 -type f -name '*.eml'` 8for filepath in $filelist 9do 10 #該当箇所です。上手く行きません。 11 filepath=`cat $filepath | base64 -D` 12 echo $filepath 13done
原因わかるかたいらっしゃるでしょうか?
filenameはどこで定義されていますか?
filenameではなくfilepathを使用していました。修正しました。
該当箇所って行っている行は「cat $filepath | base64 -D」の出力内容をfilepathに設定していて、それをどこにも出力せずに上書きし続けてるように見えるのですが、前半部分がないって具体的どういうことですか?
$fillepathをechoで出力、確認した結果、$filepathにあるべき行の前半部分がないということです。$filepathの行数が5行あるとしたら、最後の1行しか出力されない感じです。
macosは使ったことないので違うかもしれませんが、デコードのオプションは-Dではなく-dか--decodeではないのでしょうか。
--decodeの結果も同じでした。