make_ndx
スイッチを介して-o
出力するプログラムがあるとします。myprogram
bashシェルスクリプトout1.ndx
とout2.ndx
.(myprogram
文字列をスイッチへの入力として使用-o
し、ファイル拡張子を自動的に.ndx
文字列に追加)で2つのファイルを呼び出して出力したいと思います。だからbashシェルスクリプトを書いた。
#!/bin/bash
make_ndx -o out1
make_ndx -o out2
2つの出力ファイルを取得しますout1.ndx
。しかし、合計をout2.ndx
得たいと思います。out1.ndx
out2.ndx
ファイル名をコピーしてテキストファイル(またはこの投稿)に貼り付けると、次のように表示されるため、
の文字は改行または戻り文字(おそらくまたは\n
?)に対応するようです。\r
out1.ndx
out1
.ndx
(この記事の目的に応じて、
SSH GUIで見られる長方形の記号を表すために他の文字(。)
最初の出力ファイルのファイル名に改行が表示されないように、bashシェルスクリプトをどのように作成できますか?呼び出し間に余分なスペースを追加すると、同じ問題が発生しますmake_ndx
。
#!/bin/bash
make_ndx -o out1
make_ndx -o out2
時間をいただきありがとうございます。
答え1
2つの可能性があるようです。
ファイル名の一部として \r を渡します。このようなことは一般的に起こってはいけません。ファイルのEOL文字が一致しない場合、この問題が発生する可能性があります。 WindowsはCRLFペアを使用してテキストファイルの行を終了します。 UnixはLFのみを使用します。ファイルを編集する方法に応じてCRLFを追加できます。これはさまざまな状況を破る可能性があります。
もう1つの変形は、out1が実際に変数(
make_ndx -o "$out1"
)から出た場合、変数からLFをキャプチャした可能性があることです。で始まることを確認すると、アクションecho -n "$out1" | xxd -p
が表示されます0a
。make_ndx
オフロード車です。このコマンドは\ rを渡さずに内部的に挿入します。 Bashスクリプトでできることはありません(まあ、mv
名前を変更する以外に)。ソースコードがあれば、make_ndx
直接修正できます。それ以外の場合は、そのコードをサポートしている人に連絡する必要があります。
さまざまな方法で行末が混在していることを確認できます。たとえば、xxd
bashスクリプトの16進ダンプを取得する場合は0x0d
CR(\ r)です。0x0a
LF(\n) です。ファイルにCRを表示しないでください。