Bash Shell Scripting:我错过了什么简单的逻辑

时间:2008-11-13 21:04:05

标签: linux bash shell pid

这个问题可能过于笼统但是...... 我试图从shell脚本中移动目录而感到难过。我不是一个* nix高级用户,但我很乐意通过命令行完成大多数任务。我想调用一个可以将“我”移动到目录的脚本,而不仅仅是类似于以下内容的脚本过程:

prompt:> goto lit   

其中goto是别名 - > goto='./goscript'

goscript有一些简单的代码,例如:

cd /path to work dirs/lit/user dir  

(假设每个用户都有一个目录/点亮)

我自己通过设置我的个人别名来移动到所需的目录,运行脚本,然后返回到原始目录,从而避免了这个问题。这个问题是由一个使用类似方法的同事带给我的,但是想让这个过程更通用,所以我们不需要创建我们需要的每个别名。 我认为这将是一个容易解决的问题,但是我很难过,因为我还没有太多的shell脚本编写经验...

9 个答案:

答案 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