ファイル名の時間フィールドの問題

ファイル名の時間フィールドの問題
cd /u01/saddy | printf '%s\n' "XYZ.ABC.V.$(date -d '2020-06-14 +1 day' +%Y%m%d)"*.batch ;

puttyパスを介して上記のコマンドを実行すると、/u01/saddyコマンドが正しく実行され、予想される出力が得られます。

XYZ.ABC.V.20200615180200.batch

ただし、自宅の場所でコマンドを実行しようとすると、コマンドは次のように出力を返します。

XYZ.ABC.V.20200615*.batch

場所にあるファイルは/u01/saddy次のとおりです。

XYZ.ABC.V.20200615180200.batch,
XYZ.ABC.V.20200616190100.batch,
XYZ.ABC.V.20200617140200.batch.

ベストアンサー1

cmd1 | cmd2

2つの異なるプロセスで同時に実行され、cmd1出力cmd2cmd1入力にパイプされます。cmd2

だから:

cd /some/dir | printf '%s\n' some-glob

あまり意味がありません。これは、他のプロセスからいくつかのグロブの拡張を印刷している間、いくつかの(一時的な)プロセスの現在の作業ディレクトリを変更します。

cdの出力をに送信しますprintfが、cd最初は何も印刷せず、printf入力はとにかく読み取られません。

おそらくあなたは次のことを意味します:

cd /some/dir && printf '%s\n' some-glob

つまり、シェルの作業ディレクトリを変更し、成功するとcdglobの拡張を印刷します。

または(cd別のプロセスで実行され、printf現在のディレクトリを変更した後に同じプロセスで呼び出される場合):

(cd /some/dir && printf '%s\n' some-glob)

(...)サブシェル環境は通常サブシェルプロセスをフォークすることから始まり、環境への変更はcd内部変更範囲に制限されます(...)。)


またはソケットペア殻が少しあります。

²標準出力から何かを印刷できる唯一のケースは、設定時(または/一部のシェルを使用して)またはスラッシュなしで引数として渡す-ときです。-<n>+<n>$CDPATH

おすすめ記事