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
出力cmd2
はcmd1
入力にパイプされます。cmd2
だから:
cd /some/dir | printf '%s\n' some-glob
あまり意味がありません。これは、他のプロセスからいくつかのグロブの拡張を印刷している間、いくつかの(一時的な)プロセスの現在の作業ディレクトリを変更します。
cd
の出力をに送信しますprintf
が、cd
最初は何も印刷せず、printf
入力はとにかく読み取られません。
おそらくあなたは次のことを意味します:
cd /some/dir && printf '%s\n' some-glob
つまり、シェルの作業ディレクトリを変更し、成功するとcd
globの拡張を印刷します。
または(cd
別のプロセスで実行され、printf
現在のディレクトリを変更した後に同じプロセスで呼び出される場合):
(cd /some/dir && printf '%s\n' some-glob)
((...)
サブシェル環境は通常サブシェルプロセスをフォークすることから始まり、環境への変更はcd
内部変更範囲に制限されます(...)
。)
またはソケットペア殻が少しあります。
²標準出力から何かを印刷できる唯一のケースは、設定時(または/一部のシェルを使用して)またはスラッシュなしで引数として渡す-
ときです。-<n>
+<n>
$CDPATH