2015-07-12 282 views
0

我是shell脚本新手。我已将script_hdl脚本文件保存在我的主目录中。在我的主目录中,我想按照以下顺序使用脚本进行导航:cd ../../site/edu/ess/project/user/rark444使用shell脚本浏览文件夹

然后从此新位置打开一个新选项卡终点站。

我用这个作为我的脚本:

#!/bin/bash 
alias script_hdl="cd ../../site/edu/ess/project/user/rark444" 

我像这样运行

./script_hdl

的脚本,但我没有看到在终端任何回应。我觉得我错过了一些东西,但我不知道它是什么。在此先感谢您的帮助。

+1

这不是一个别名的脚本。运行'。/ script_hdl'应该会给你一个错误,除非在当前目录中存在具有该名称的文件。如果你运行'script_hdl'来代替运行那个'cd'命令(它只会在任何目录下都能正常工作)。 –

+0

是的,我在当前目录下有script_hdl,这是我的主目录。我从这里读取[http://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script]该命令不能用于脚本和如此使用的别名。但是,在运行此操作后,我没有看到终端中目录中的更改。所以如果是IDK,甚至运行cd命令。 –

+0

你想写一个脚本或创建一个别名?他们是不同的东西。你有什么是别名。它与一个同名的脚本没有任何关系(唯一的联系是它们具有相同的名称)。您可以在脚本中运行'cd',但它不会更改运行中的shell的目录。你可以编写一个别名来改变当前shell的目录,但这不是一个脚本。 –

回答

1

您有两种方法可以在此更改目录。

脚本

第一个是编写一个脚本,在这样你可以cd后运行其他命令的方式。它的工作原理没有alias命令:假设你删除它。

cd命令适合正在运行的进程。当你执行你的脚本时,会发生以下情况:

  1. 你的shell产生了一个新的shell进程来执行你的代码。主要过程等待其孩子完成;
  2. 这个新的子进程实际上确实使用您的cd命令更改了其自己的工作目录,然后退出(已结束)
  3. 原始shell进程停止等待并再次打印提示。但此方法有改变目录(仅那孩子的过程)

要执行你想要什么,(去掉alias命令,然后)打电话给你的脚本如下:

source script_hdl 

或使用以下快捷方式:

. script_hdl 

这意味着您希望指令在相同的shell进程中运行。

别名

更改目录的第二种方法是使用别名。但是,您不应该将别名定义写入随机脚本文件,而应将其添加到您的~/.bashrc中(而每次打开shell时都会运行此文件)。 所以:

alias script_hdl="cd ../../site/edu/ess/project/user/rark444" 

重装~/.bashrc

. ~/.bashrc 

然后不要试图从文件执行,只需启动你的别名,就好像它是一个正常的命令:

script_hdl 
+0

让我们忘记问题中提到的道路。所以我只在脚本文件cd/Desktop中有脚本文件,当我使用“source script_hdl”时,我没有得到这样的文件或目录,当我使用“script_hdl”时,我得到/ bin /:权限被拒绝。但我在当前位置有名为Desktop的文件夹。为什么它显示没有这样的文件或目录? –

+0

当您调用'source script_hdl'时,您正在采购脚本文件。如果它不在当前工作目录中,则必须以这种方式添加路径:'source/example/path/to/script_hdl'。对于第二个错误消息,我认为这是由于您之前在终端中定义的别名。尝试'。 。/ script_hdl',它不会调用别名(或从新的tty尝试)。 – Qeole

0

确保拼写正确,因为unix区分大小写并且您拥有权限。首先在命令行上尝试一下,以确保它可以正常工作,如果出现错误,它将出现在命令行上,因为有时脚本会隐藏错误和消息。如果有效,则将文本复制到脚本文件中,不要使用别名。

这里是别名的正确用法

https://en.wikipedia.org/wiki/Alias_(command)

1

看起来像你试图建立一个别名。您可以通过编辑在你的主目录的的.bash_profile文件(如果它不存在,你可以创建一个,然后运行编辑程序后,“源的.bash_profile”)做到这一点,并作出这样别名script_hdl =“CD中的条目../../site/edu/ess/project/user/rark444',然后从您的终端运行“script_hdl”

欲了解更多有关别名的信息,你可以访问保罗提到的链接。