mkdirを使用すると、ディレクトリ名に不要な疑問符が追加されます。

mkdirを使用すると、ディレクトリ名に不要な疑問符が追加されます。

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^JWindows では、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'`

関連情報