0

これはhttps://apple.stackexchange.com/questions/52459/のフォローアップであり、bash での予期しない動作に関するものです。そのリンクの内容を要約すると、問題はターミナルの現在のディレクトリをペーストボードなどの一時変数にコピーし、それを使用して別のターミナルウィンドウでディレクトリを切り替えることです。そこで提供されたソリューションは、最も効率的な方法でそれを釘付けにします! ただし、正しくエスケープされたディレクトリ名でこの一時変数を使用して実際にディレクトリを変更しようとすると、bash では正しく動作しないようです。

私の最小限の作業例は次のとおりです。

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

ターミナルで:

>$ mkdir tmp
>$ cd tmp
>$ mkdir test\ dir
>$ cd test\ dir
>$ cwd | pbcopy

新しいターミナルで:

>$ echo "$(pbpaste)"
/Users/foo/tmp/test\ dir/
>$ cd $(pbpaste)
-bash: cd: /Users/kaushik/tmp/test\: No such file or directory
>$ cd "$(pbpaste)"
-bash: cd: /Users/kaushik/tmp/test\ dir/: No such file or directory

私は自分が間違っていることを理解しようとしてかなり途方に暮れています。私が確信しているのは、これが bash の問題であり、OS X で発生しているものではないということだけです。

これについてのあなたの助けに感謝します。ちなみに、私はついに、何年も経った後、最初のスタックオーバーフローの投稿を書くことになりました!

4

1 に答える 1

1

コメントからコピー: リンクされた回答は、貼り付けに適したエスケープされた PWD を具体的に要求しますが、エスケープが逆効果になるプログラムによる入力が必要です。pwd | pbcopyとするだけですcd "$(pbpaste)"

編集:

(正直なところ、pwd を使用してスペースを含むディレクトリを作成する方法であるため、明示的にエスケープする必要があると思いました。)

問題は、コマンドライン パーサーがエスケープ解除を 1 回しか実行しないことです。の場合cd foo\ bar、スペースはエスケープされません。の場合、cd $(pbpaste)エスケープするものは何もありません。thenpbpasteのリテラル出力は引数リストに入れられます。

于 2015-04-09T05:32:32.110 に答える