Bashシェルスクリプトを介してプログラムを複数回呼び出す

Bashシェルスクリプトを介してプログラムを複数回呼び出す

make_ndxスイッチを介して-o出力するプログラムがあるとします。myprogrambashシェルスクリプトout1.ndxout2.ndx.(myprogram文字列をスイッチへの入力として使用-oし、ファイル拡張子を自動的に.ndx文字列に追加)で2つのファイルを呼び出して出力したいと思います。だからbashシェルスクリプトを書いた。

#!/bin/bash

make_ndx -o out1
make_ndx -o out2

2つの出力ファイルを取得しますout1.ndx。しかし、合計をout2.ndx得たいと思います。out1.ndxout2.ndx

ファイル名をコピーしてテキストファイル(またはこの投稿)に貼り付けると、次のように表示されるため、の文字は改行または戻り文字(おそらくまたは\n?)に対応するようです。\rout1.ndx

out1
.ndx

(この記事の目的に応じて、SSH GUIで見られる長方形の記号を表すために他の文字(。)

最初の出力ファイルのファイル名に改行が表示されないように、bashシェルスクリプトをどのように作成できますか?呼び出し間に余分なスペースを追加すると、同じ問題が発生しますmake_ndx

#!/bin/bash

make_ndx -o out1

make_ndx -o out2

時間をいただきありがとうございます。

ベストアンサー1

2つの可能性があるようです。

  1. ファイル名の一部として \r を渡します。このようなことは一般的に起こってはいけません。ファイルのEOL文字が一致しない場合、この問題が発生する可能性があります。 WindowsはCRLFペアを使用してテキストファイルの行を終了します。 UnixはLFのみを使用します。ファイルを編集する方法に応じてCRLFを追加できます。これはさまざまな状況を破る可能性があります。

    もう1つの変形は、out1が実際に変数(make_ndx -o "$out1")から出た場合、変数からLFをキャプチャした可能性があることです。で始まることを確認すると、アクションecho -n "$out1" | xxd -pが表示されます0a

  2. make_ndxオフロード車です。このコマンドは\ rを渡さずに内部的に挿入します。 Bashスクリプトでできることはありません(まあ、mv名前を変更する以外に)。ソースコードがあれば、make_ndx直接修正できます。それ以外の場合は、そのコードをサポートしている人に連絡する必要があります。

さまざまな方法で行末が混在していることを確認できます。たとえば、xxdbashスクリプトの16進ダンプを取得する場合は0x0dCR(\ r)です。0x0aLF(\n) です。ファイルにCRを表示しないでください。

おすすめ記事