OS Xのターミナルでupdate_terminal_cwdが行うこと


21

私は今しばらくの間、それに戸惑っています。では$PROMPT_COMMANDOS Xでのbashの、と呼ばれるコマンドがありますupdate_terminal_cwd。それは組み込みのbashではなく、OS Xにのみ存在する可能性が高いと確信しています。誰でも知っていますか?

回答:


26

現在の作業ディレクトリ(CWD)をエコーするようにプロンプ​​トを更新し、以下で定義され/etc/bashrcます。

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL,
    # including the host name to disambiguate local vs.
    # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
}

Apple Terminalアプリでシェルを実行している場合にのみ、関数が定義されることに注意してください。iTermを使用している場合、定義されません。
nwinkler

一体何のためのエスケープ-7であり、どこに印刷されますか?それはどこに文書化されていますか?:)
ワイルドカード

1
@Wildcard xtermタイトルバーのテキストを設定する制御コードです。最もアクセスしやすいドキュメントは、おそらくLinux Bash Prompt Howtoです。xtermソースには実際のドキュメント、IIRCがあります。
トリプリー16

2
この関数は9行目で設定されています/etc/bashrc_Apple_Terminalここで学んだトリックで発見)。しかし、スクリーンセッション内では、$ PROMPT_COMMANDが空の文字列になります。これ/etc/bashrc_Apple_Terminalは、おそらくもう実行されないことを意味します。なぜなのかご存知ですか?
-zyxue

1
@zyxueを見ると/etc/bashrc、変数$TERM_PROGRAMを使用して端末を判別し、/etc/bashrc_$TERM_PROGRAM存在する場合は対応するものを実行します。したがって、スクリーンセッションで$TERM_PROGRAMは、おそらく設定されていないか、以外に設定されていApple_Terminalます。
デビッドモール

-15

不透明なシークレットでエンコードされた形式文字列 '\ e] 7;%s \ a'。容疑者。

local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"

私が収集したものから、「file:// $ HOSTNAME」はマスクされているので、リモートプロトコル:ホストスパイを見ることができません。


1
...または$ HOSTNAMEは、スクリプトが実行されているシステムに応じて変化する変数です。?!?妄想くらい?他の回答にリストされているコードが画面に印刷する以外のことができると思う場合、bashスクリプトがどのように機能するかわかりません。
tubedogg 14年

あなたはメモを手に入れませんでしたか?-「ShellShock」bashの脆弱性web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271いずれの場合も1)環境変数 'update_terminal_cwd'を設定していないという点で不明な原因その上、それは関数です。自動的に疑わしい。大量浸潤。誰もそれを望んでいない。NISTはApple OSXとブラウザのFirefox / Chrome / Operaの「脆弱性」を報告するでしょうか?
user982671 14年

7
何を話しているのかわからないことを示し続けます。update_terminal_cwd環境変数ではなく、関数の名前です。これはクリアテキストで定義されて/etc/bashrcおり、このprintf関数には、フォーマットされた文字列を画面に出力する以外の機能はありません。最後に、投稿したvulnリンクには、環境変数の定義にテキストを追加して任意の関数を実行します。これは、ここで説明していることとは何の関係もありません。また、ブラウザはシェルスクリプトに関係していますか?
tubedogg 14年

これは、尋ねられた質問に答えようとはしません(この声明を正当化するための詳細な分析については、こちらを参照してください)。尋ねられた質問に答える回答用の回答ボックスを予約してください。ありがとうございました!
DW

1
@tubedogg haha​​ yeah、そうすれば、typeset -fすべての「ユーザー定義」関数が表示され、それがポップアップ表示されます。彼らが何か大ざっぱなことをしようとしていたなら、彼らはこれを簡単に目に見えないでしょう。
コロブキャニオン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.