我想在每次进入新目录时(使用cd时)更改标题,但仅显示最后2个目录。我在工作时使用tcsh
,在家中使用bash
。
例如:如果我在文件夹~/work/stuff
并且我写道:cd 1.1
,我希望我的新标题为stuff/1.1
。
我每次更改文件夹时都知道如何更改标题:
alias cd 'cd \!*; echo "\033]0;`pwd`\a"'
我知道如何只拿最后两个目录:
pwd | awk -F / -v q="/" '{print $(NF-1)q$NF}'
问题是如何将这两者结合起来,或者如何以不同的方式做到这一点? 它不必通过cd的别名。
答案 0 :(得分: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"
它用awk拆分pwd,只获取最后3个目录,然后打印到选项卡名称。 然后我在.alias文件中添加了以下内容:
alias cd 'cd \!*; <dir of script file>/titleRename.tcsh'
现在每当我cd到另一个目录时标题名称都会自动更改:)
答案 1 :(得分: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中使用转义序列。