シェルスクリプトがMac OS X Catalinaで実行されているファイルが見つかりません。

シェルスクリプトがMac OS X Catalinaで実行されているファイルが見つかりません。

私にアドバイスをしていただければ幸いです。 Mac OS X Catalinaでシェルスクリプトを使用すると、スクリプトがクラッシュします。多くのセキュリティ変更があることがわかりましたが、これまでダウンロードフォルダにアクセスするための修正は見つかりませんでした。印刷するファイルにアクセスできないため、スクリプトでエラーが発生しました。スクリプトは次のとおりです。

do shell script "cat `ls -t /UserName/Downloads/Barcodes*.zpl | head -1` | lpr -P BarcodePrinter -o raw " with administrator privileges

ファイルの場所に対するいくつかの修正が試みられました。ダウンロードフォルダには、*バーコードファイルから生成された20文字以上の文字を可変とする長い名前のファイルがまだ含まれています。プリンタ名はまだ一致しますが、エラーは次のとおりです。

No such file or directory
lpr:  No file in print request

どんな提案にも感謝します。フォーラムを検索しましたが、初心者で正しい解決策が見つからないようです。

答え1

コマンド自体が正しいとzsh仮定し、macOSでシェルを使用します。lpr

lpr -P BarcodePrinter -o raw < ~/Downloads/Barcodes*.zpl(.Nom[1])

glob(.Nom[1])修飾子は、前のglobbingパターンの動作を変更して通常のファイルにのみ一致し(これがまさにそのことです.)、一致するものがなければまったく拡張されません(シェルの場合N)。nullglobbash

修正タイムスタンプ順に一致する結果を並べ替えom[1]、最後に変更された一致ファイルであるリストの最初の項目のみを選択します。

パターンが何も一致しない場合、シェルは文句を言うでしょう(間違ったディレクトリを指定したり、間違ったファイル名を入力した場合はこれは行われません)。

zsh: no such file or directory: ~/Downloads/Barcodes*.zpl(.Nom[1])

シェルがそのようなエラーを報告すると、常に見つからないファイルのパス名を記録します(このパス名は質問のエラーから欠落しているため、問題の診断が簡単になります)。


以下のコメントに掲載されている追加情報は、ファイルの実際の名前が一致するかどうかを~/Downloads/zebraBarcodes*.zpl明らか~/Downloads/*Barcodes*.zplにしました~/Downloads/Barcodes*.zpl。更新されたパターンを使用した上記と同じアプローチが機能します。

答え2

おそらくここで何が起こるのかは、デフォルトの動作がファイルを列ls単位で標準出力として印刷することであるため、1行に複数のファイル名が表示されることがあります。lsフルファイル名(たとえば、ディレクトリプレフィックスを含む)も印刷されないため、最初にcdコマンドを使用すると、後続のコマンドが選択したファイルを正しく検索できるようにディレクトリに移動します。私はlsそのようなファイルをフィルタリングするためにglobを使用しません。grep正規表現を使用するを使用してください。

努力する:

cd /Username/Downloads | dir -w 1 -t /UserName/Downloads/ | grep "^Barcodes.*\.zpl$" | head -1 | lpr -P BarecodePrinter -o raw

また、プリンタの「BarecodePrinter」スペルが正しいことを確認してください。

はいいいえ解析するファイルを使用lsまたは一覧表示する方が良いでしょうが、魔法がないかのように時間ごとに並べ替えるように正しく設定する方法がわかりません。dirfindlsawk

そしてfindsortそしてawk

find /UserName/Downloads -maxdepth 1 -printf "\n%AD %AT %p\n" | grep ".*Barcodes.*\.zpl$" | sort -r | awk '{ print $3 }' | head -1 | lpr -P BarecodePrinter -o raw

ファイル名を不適切にエスケープすると問題が発生する可能性がありますが、これはfind悪名高いようです。これをより安全にすることは確かに可能ですが、それは私の能力を超えています。他のユーザーに任せます。

関連情報