mkdir -p $fbase を使用するとき、なぜ望まないものが出てくるのかわかりません。ディレクトリ名に追加されます(27obs87St01Rec1?)。同様のスレッドに沿ってcat -A filenameを実行して、スクリプトに不要な文字があるかどうかを確認しましたが、何もないようです。私もdos2unix filenameを実行しました。私はLinuxシステムで最初からスクリプトを書いているので、Windowsの影響を受けません。 $filebase パラメーターを使用したためです。助けてくれてありがとう。
#!/bin/csh
# Distribute files into separate directories and run SHEBA on each
# Check what phase to run analysis for
echo "RUN_SHEBA.CSH: CNTRL-C to abort"
unalias sac
mkdir -p filtered
mkdir -p stack
mkdir -p plots
mkdir -p results
# READ STATION LIST
set nev = `cat stationlist1.csv | wc -l`
echo "NUMBER OF EVENTS=" $nev
@ iev = 1
echo $iev
# LOOP OVER EVENTS
while ($iev <= $nev)
echo "CURRENT EVENT=" $iev
# EXTRACT EVENT LINE
set fbase = `head -$iev stationlist1.csv | tail -1`
echo $fbase
# CLEAN UP ANY PRE-EXISTING DIRECTORIES
\rm -rf $fbase
mkdir -p $fbase
# COPY THE FILES
cp ~/SAC/sac/macros/$fbase.* $fbase
cd $fbase
完全なスクリプトは次のとおりです。
#!/bin/csh
# Distribute files into separate directories and run SHEBA on each
# Check what phase to run analysis for
echo "RUN_SHEBA.CSH: CNTRL-C to abort"
unalias sac
mkdir -p filtered
mkdir -p stack
mkdir -p plots
mkdir -p results
# READ STATION LIST
set nev = `cat stationlist1.csv | wc -l`
echo "NUMBER OF EVENTS=" $nev
@ iev = 1
echo $iev
# LOOP OVER EVENTS
while ($iev <= $nev)
echo "CURRENT EVENT=" $iev
# EXTRACT EVENT LINE
set fbase = `head -$iev stationlist1.csv | tail -1`
echo $fbase
# CLEAN UP ANY PRE-EXISTING DIRECTORIES
\rm -rf $fbase
mkdir -p $fbase
# COPY THE FILES
cp ~/SAC/sac/macros/$fbase.* $fbase
cd $fbase
## CONFIGURE SHEBA
# BUILD THE ANALYSIS MACRO
cat << END >.temporary_sac_shebanew
setmacro /apps/SAC/sac/macros
window 1 X 0.1 0.6 Y 0.50 1.00
qdp off
gtext hardware
END
echo "m shebanew file $fbase comps C1 C2 C3 pick no plot yes batch yes" >>.temporary_sac_shebanew
# RUN SHEBA
sac .temporary_sac_shebanew
\cp ${fbase}_result.eps ../plots
\cp ${fbase}.lam2 ../stack
\cp *.final_result ../results
cd..
@ iev = $iev + 1
echo "I AM FINISHED"
end
答え1
入力ファイルがWindowsで準備されていることを修正に表示できます。
私はその文字が疑問符ではなく、ls
印刷できない文字があることを伝えるだけだと確信しています。問題の印刷できない文字は、キャリッジリターン(CR、一般的またはマークさ\r
れています\015
)です^M
。
CR文字は、Windowsで生成されたテキストファイルの行末に表示されます。 WindowsとUnixはテキストファイルを異なって表します。 UnixはLF文字(\n
、、、)を行終端として使用します(つまり、各行は印刷可能文字とLFで構成されています)\012
。^J
Windows では、2 つの文字シーケンス CR-LF を行終端として使用します。行区切り記号(つまり、各行は印刷可能文字、CR、LFで構成されていますが、通常は最後の行は印刷可能文字で構成されています)。この偽のCR文字が表示されます。 Linux またはその他の Unix システムでは、CR 文字は通常の文字 (印刷できませんが) なので、そのまま残って問題を引き起こします。
このファイルをUnixテキストファイルに変換する必要があります。 Linuxでは、次のものを使用できます。
sed -i -e 's/\r$//' /path/to/file
または、きれいなコピーを作成するには、次のものを使用できます。
</path/to/windows/file tr -d '\r' >/path/to/unix/file
スクリプトをより強力にするには、ファイルを読むときにCRを削除してください。
set fbase = `head -$iev stationlist1.csv | tail -1 | tr -d '\r'`