pwdにbashエスケープスペースを含めることは可能ですか?


21

現在のディレクトリをクリップボードにコピーしたいと思いますpwd | pbcopy。ただし、pwdスペースをエスケープしないため、たとえば、「アプリケーションサポート」の何かが正しくコピーされません。私はこれが常に事実であることを覚えていないようですので、私は何かをoffしたかもしれません。iTerm2を使用します。

すべてをエスケープするbash設定はありますか?Spaces.appまたは約悩み検索、あまりにも多くの質問/トピックを持ちますesc

現在:

$ pwd
/Library/Application Support/Google Earth/

優先:

$ pwd
/Library/Application\ Support/Google\ Earth/

すでに記事を見て:クリップボードに現在のディレクトリのパスをコピーし、bashの中にスペースを含む名前のディレクトリにcdにどのように?、これに対処しません。前者でコメントしたはずですが、権限がありません。


1
コピーが正しいとは思わない-スペースを処理するためのペーストが欲しい-どのアプリに貼り付けているのか?
マーク

いい質問ですね。すぐにコメントするのに十分な担当者がいます。サイトへようこそ!
bmike

1
pwd | pbcopyターミナルでうまく動作します。Finder / Edit / Show Clipboardは、問題がないことを確認します。
lhf

@lhfはい、あなたが述べたように機能するターミナルでチェックインする必要があります。しかし、iTerm2には運がありません。多分私は戻って切り替える必要があります
...-greenwar

これは、実行しているターミナルエミュレータにどのように依存しますか?pwd | pbcopyiTerm2でテストして正常に動作しました。
-lhf

回答:


13

このコマンドはスペースを適切にエスケープします:

printf "%q\n" "$(pwd)" | pbcopy

別のcwdをcwd再定義してもかまわない場合など、履歴のあるものを使用してエイリアスを作成できます。

alias cwd='printf "%q\n" "$(pwd)" | pbcopy'

パイプをpwdcopyのように動作させ、エスケープされたパスを出力する場合は、pbcopyにパイプを捨てます。


Macでは動作しません
Macilias

1
私のMacで動作します。
ジェイソンスウェット

5
pwd | sed 's/ /\\ /g'

しかし、これが最終的に問題を解決するかどうかはわかりません。pbcopyは、stdinで受け取ったものを正確にコピーしています。


これはスペースをエスケープするだけであり、OPが例として使用しているものの、十分ではありません。
オールドプロ

しかし、これはほとんどの場合動作しますが、glennの適切なものは私のMacでは動作しませんでした。出力はまったくありません
-Macilias

関数を宣言するときに別名として使用することもできます。function escapePWD(){pwd | sed 's / / \\ / g'; }そして、エイリアスにこれを使用します:alias epwd = 'escapePWD'
Macilias

1

pwdこれは一般に役に立たないため、エスケープされたファイルパスを出力する組み込みの方法はありません。

それはのために意味がありませんpwdか、pbcopyコピーされたものにバックスラッシュを追加すること。パスをテキストファイルまたはWeb投稿にコピーする場合は、バックスラッシュを挿入しないでください。

おそらく、あなたがしたいことはqwd、現在のディレクトリの引用された形式を印刷するかpbpaste、二重引用符で囲むのと同じくらい簡単な出力をエスケープするために、のような別のエイリアスとして作成することです:

bash-3.2$ pwd
/Users/user
bash-3.2$ cd test\ dir/untitled\ \"folder/
bash-3.2$ pwd
/Users/user/test dir/untitled "folder
bash-3.2$ pwd | pbcopy
bash-3.2$ echo "`pbpaste`"
/Users/user/test dir/untitled "folder
bash-3.2$ cd
bash-3.2$ pwd
/Users/user
bash-3.2$ cd `pbpaste`
bash: cd: /Users/user/test: No such file or directory
bash-3.2$ cd "`pbpaste`"
bash-3.2$ pwd
/Users/user/test dir/untitled "folder

エスケープが必要なのはスペースだけではないことに注意してください。 スラッシュとバックスラッシュ、スター、疑問符、アンパサンド、セミコロン、およびその他の文字もエスケープする必要があります。最も安全なのは、例のように二重引用符を使用することです。これは、パスに二重引用符が含まれていても機能します。

ひどくなりたい場合は、AppleScriptに現在のディレクトリを引用させることができます。

bash-3.2$ alias qwd="osascript -e 'return quoted form of POSIX path of (POSIX file \"./\" as alias)'"
bash-3.2$ qwd
'/Users/user/test dir/untitled "folder'

それ以外の場合、上記のようにqwd、通常と干渉しないように引用形式をエイリアスすることを除いて、グレンにほぼ同意しますpwd

alias qwd='printf "%q\n" "$(pwd)"'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.