2

私は密集している必要がありますが、これを解決することはできません。私はここでグーグルで検索しましたが、何も機能しません。

簡単なシェルスクリプトがあります。現在は以下のようになっています。diffコマンドは、2番目の引数(下の赤い引数)に「そのようなファイルまたはディレクトリはありません」で失敗します。

#!/bin/bash

set -x

cd "/Volumes/$1/Backups.backupdb/SkiAddict’s Mac/Latest"
time diff -qr /Users/n/Documents/Code "SkiAddict’s Mac/Users/n/Documents/Code"

ターミナルから次のようなスクリプトを呼び出します。

bash myScript.sh Quadra

私はシェルスクリプトをよく知りませんが(実際には、まったくよくありません)、これは本当にロケット科学ではありえません!

最初のコマンド(cd)を機能させるために、1時間以上壁に頭をぶつけました。「SkiAddict's」の引用文字がスマートな引用でない限り、同じエラーが発生することが判明しました(そのようなファイルやディレクトリはありません)。これで、その行は正常に機能し、その行からテキストをコピーしてdiffコマンドに貼り付けても、機能しません。

このスクリプト全体は、ターミナルウィンドウにテキストを入力するすでに機能しているQuicKeysマクロからコピーされたものであるため、シェルスクリプトを作成することは大したことではないと思いました。マクロは、この行を新しい[ターミナル]タブに「入力」することから始まります。

cd /Volumes/Quadra/Backups.backupdb/SkiAddict’s\ Mac/Latest

次に、Enterキーを押して、次の行を「入力」します。

time diff -qr /Users/n/Documents/Code "SkiAddict's Mac/Users/n/Documents/Code"

もう一度、Enterキーを押します。物事は完璧に動作します。

私は、どちらかの端で二重引用符、どちらかの端で一重引用符を試し、どちらかの端で二重引用符または一重引用符がある場合とない場合の両方で、引用符をエスケープしました。何も機能しません。

ヘルプ???

4

2 に答える 2

1

スクリプトが実際に何を行っているかを確認するには、スクリプトにいくつかの echo コマンドを追加して、期待どおりに引用符とエスケープが展開されているかどうかを確認します。をに置き換えるだけtime diffecho、実行したい方法とは異なるパスが出力される場合は、それに応じて変更します


あなたが開こうとしている 2 番目のファイルはおそらく存在しないと思います。必要なパスは次のようになる可能性が最も高いです。

/Users/n/Documents/Code

Unix (または mac) マシンでは、すべてのパスは「ルート」ディレクトリから始まり、単に次のように認識されます。

/

あなたのコンピュータの「名前」ではありません。SkiAddict's Mac


一方、実際にTimeMachineボリューム内のディレクトリにアクセスしようとしている場合は、相対パスが必要ですが、これは単にスクリプトで間違っている可能性があります。行から始まるフルパスを使用してみて/Volumes/...くださいdiff。現状では、this is the file の後、cd次と比較しようとします。

"/Volumes/$1/Backups.backupdb/SkiAddict’s Mac/Latest/SkiAddict’s Mac/Users/n/Documents/Code"

cd /Volu...ターミナルに入力し、タブ補完を使用して、正しいパスを決定できますTimeMachine。タブ補完はスペースと特殊文字を適切にエスケープし、既存のパスを見つけます。おそらく、これはパス名のエラーを見つけるのに役立ちます。

于 2013-02-24T04:48:05.037 に答える
1

昨夜答えを見つけましたが、ここに来たばかりなので、自分の質問に答えることができませんでした。Bash FAQ のおかげで、 $'...' について知ることができました。これにより、パス内の一重引用符をバックスラッシュで囲むことができ、diffコマンドが快適になります。

いいえ、cdコマンドを同じように扱うことはできません。その行について何かを変更すると、再び機能しなくなります!!! はぁ...

したがって、2 つの行は次のようになります。

cd "/Volumes/$1/Backups.backupdb/SkiAddict’s Mac/Latest"
time diff -qr /Users/n/Documents/Code $'SkiAddict\'s Mac/Users/n/Documents/Code'

@askewchan に感謝します。私たちはそれについてどこにも行きませんでしたが、それについて「話す」誰かがいるのはとても良かったです:-)

于 2013-02-24T19:26:21.130 に答える