1

我想创建一个 cd 版本,它将从目录结构中删除文件名,然后 cd 到该目录。

因此,例如,如果我放入 (tc)shell

cd /net/homes/me/myfile.jpg 

它将剥离 'myfile.jpg' 和 cd 到目录结构。我试过这是我的 .cshrc:-

alias ccd '/net/homes/me/scripts/getDir.py'

然后我的 getDir.py 文件读取为:-

#! /usr/bin/python

import sys
import os

def get_dir():
    the_dir = sys.argv[1]
    dir_split = the_dir.split("/")
    dir_count = len(the_dir.split("/"))

    file_count = len(dir_split[dir_count-1])
    only_dirs = the_dir[:-file_count]
    #print only_dirs
    os.chdir(only_dirs)


get_dir()

这很好地剥离了 dir 结构的文件名部分(我可以从 print 语句中看出这一点),但 chdir 命令似乎不起作用。

谢谢!

4

2 回答 2

2

chdir 不会改变调用 shell 的状态。

您需要将别名更改为如下所示(不确定确切的 tcsh 语法):

  alias ccd 'cd `getDir.py`'

然后你的 getDir 脚本什么都不做,只打印正确的路径字符串(不需要 chdir)

于 2013-06-12T16:25:46.490 回答
2

有一个名为的标准二进制文件dirname可以为您执行此操作,因此您可以使用...

alias ccd 'cd `dirname \!:1`'

这行得通,你能解释一下语法吗?

好吧,这dirname \!:1部分意味着dirname使用传递给别名命令的第一个参数运行程序,并且反引号将该程序的输出替换为cd命令。

于 2013-06-12T16:37:54.970 回答