这个问题可能过于笼统但是...... 我试图从shell脚本中移动目录而感到难过。我不是一个* nix高级用户,但我很乐意通过命令行完成大多数任务。我想调用一个可以将“我”移动到目录的脚本,而不仅仅是类似于以下内容的脚本过程:
prompt:> goto lit
其中goto
是别名 - > goto='./goscript'
和
goscript
有一些简单的代码,例如:
cd /path to work dirs/lit/user dir
(假设每个用户都有一个目录/点亮)
我自己通过设置我的个人别名来移动到所需的目录,运行脚本,然后返回到原始目录,从而避免了这个问题。这个问题是由一个使用类似方法的同事带给我的,但是想让这个过程更通用,所以我们不需要创建我们需要的每个别名。 我认为这将是一个容易解决的问题,但是我很难过,因为我还没有太多的shell脚本编写经验...
答案 0 :(得分:9)
比使用别人描述的别名更好,查看CDPATH
变量!它基本上等同于PATH
功能,但适用于 cd 命令。
例如,如果我将CDPATH
定义为$CDPATH:${HOME}/subdir
,而~/subdir
包含另一个目录subsubdir
,那么我只需执行:
cd subsubdir
从任何目录,按预期导航路径。
以下是一些更具体的内容:
http://www.caliban.org/bash/#bashtips
要设置CDPATH
变量,请在.bashrc
添加一行,例如
export CDPATH=$CDPATH:${HOME}/subdir
答案 1 :(得分:5)
您可以创建一个名为goto(或其他)的函数,并确保它在.bashrc中定义(或者您可以从当前shell“获取”它):
function goto {
# the "$USER" part will expand to the current username
# the "$1" will expand to the first argument to the function ("goto xyz" => $1 is "xyz")
cd /some-path/lit/$USER/$1
}
将它放在〜/ .bashrc中或单独的文件中,并从提示符中调用“source the-file”,然后就像任何其他程序一样调用该函数:
prompt> goto folder
cd /some-path/lit/your-user/folder
答案 2 :(得分:4)
要在提示的同一环境中执行脚本,您必须使用。
调用它假设你有一个名为的脚本:
cd ..
如果你用它调用它。你得到:
$> pwd
$> /home/users/rd/proj
$> . up
$> pwd
$> /home/users/rd
答案 3 :(得分:2)
你做不到。该脚本有自己的环境副本,因此无法更改登录shell的环境。
答案 4 :(得分:1)
当我问这个时,我不是会员(具有讽刺意味的是,我的匿名登录问题比我的正式登录问题更有天赋),所以我现在无法关闭它 - 但是 - Remo D.等。答案将是导致我们需要的工作解决方案的答案。如果任何拥有mod权限的人可以关闭这个&选择那个作为接受的答案,我会认可它。
答案 5 :(得分:0)
您不能在bash脚本中使用cd。您可以为cd和路径添加别名。
alias goto='cd /path_to_work/usr/dir'
更新:您将该行放在.bashrc文件中,然后执行
source ~/.bashrc
创建别名。
答案 6 :(得分:0)
你可以使用别名来完成这样一些简单的事情。例如,我有一些别名让我进入工作空间环境并为我们的Makefile系统配置变量。这是我用的一个真正的别名作为例子。 '&&'将继续执行命令,直到其中一个失败 - 在这样的简单场景中,不需要清理,因为不太可能发生故障。
alias main1='cd ~/code/main1 && export TOP=`pwd` && export DEBUG=1'
如果要在同事之间开发别名共享库,可以通过NFS共享它们并获取要包含的文件。
答案 7 :(得分:0)
每个脚本都有自己对当前工作目录的想法。 “cd”不是一个进程,而是一个shell内置。
执行所需操作的方法是创建别名。在csh中它将是:
alias goto 'cd /path_to_work/\!*/user_dir'
sh / bash有类似的别名设施
答案 8 :(得分:0)
我的.rc中往往有几十个别名,如下所示:
alias work='cd /home/foo/work'
alias rails='cd /home/foo/rails'
alias assets='cd /home/foo/rails/assets'
等
如果这对您不起作用,您可以使用bash中的调试挂钩在执行之前就地替换命令行 - 如果'goto'关键字是第一个关键字线。这将涉及在bash中搜索“陷阱”,但要预先警告,这种咒语在所有系统上的行为都不一样。几个月前我写了一个这样的经历,欢迎你the results。