3

新しいディレクトリに入るたびにタイトルを変更したい ( cd を使用する場合) が、最後の 2 つのディレクトリのみを表示します。tcsh仕事でも家でも使ってbashいます。例: フォルダ~/work/stuffにいて: と書いた場合cd 1.1、新しいタイトルを にしたいとしますstuff/1.1

フォルダーを変更するたびにタイトルを変更する方法は既に知っています。

alias cd 'cd \!*; echo "\033]0;`pwd`\a"'

そして、最後の2つのディレクトリのみを取得する方法を知っています:

pwd | awk -F / -v q="/" '{print $(NF-1)q$NF}'

問題は、これら2つをどのように組み合わせるか、または別の方法で行うかです。cd へのエイリアスを介する必要はありません。

4

2 に答える 2

2

私がしたことは、次のコードで titleRename.tcsh という名前のスクリプト ファイルを作成することでした。

#!/bin/tcsh -f

set fullpath = "`pwd`\a"
set newTitle = `echo $fullpath | awk -F / '{OFS="/"; if(NF > 2){printf $(NF-2);printf "/"; printf $(NF-1); printf "/"; print $NF;}else print $0}'`
echo "\033]0;$newTitle"

pwd を awk で分割し、最後の 3 つのディレクトリのみを取得してから、タブ名に出力します。次に、.alias ファイルに次を追加しました。

alias cd    'cd \!*; <dir of script file>/titleRename.tcsh'

別のディレクトリにcdするたびに、タイトル名が自動的に変更されるようになりました:)

于 2013-12-01T14:07:21.877 に答える
1

私はもともと、エイリアスのバッククォートに pwd がある完全なコマンドを使用できるはずだと考えていました。

alias cd 'cd \!*; echo "\033]0;`pwd | awk -F / -v q="/" '{print $(NF-1)q$NF}'`\a"'

しかし、ネストされた引用に問題がある可能性があることに気付きました。いずれにせよ、それは bash では機能しません。エイリアスでコマンド パラメータにアクセスする方法はないと思います。

cd をエイリアシングする代わりに、プロンプトでタイトルを更新する必要があります。私は tcsh を知りませんが、bash でこの種のことを行う通常の方法は、特別な疑似変数 PS1 を使用することです。

# Minimalist prompt
PS1="\$ "
# Additionally set terminal title to cwd
case "$TERM" in
xterm*|rxvt*)
    PROMPT_DIRTRIM=2
    PS1="\033]0;\w\a$PS1"
    ;;
*)
    ;;
esac

これは、あなたが行っていたようにディレクトリ名を完全にトリミングすることはできませんが、残念ながら、PROMPT_COMMAND でエスケープ シーケンスを使用できるようにするための引用権を取得できません。

于 2013-09-11T15:50:56.547 に答える