0

我编写了一个非常小的脚本,其中包含一个别名并执行它但它没有执行命令 ts。谁能提供我的意见来解决这个问题。

#!/bin/tcsh
alias ts 'cd /path/goswami/;'
ts
4

2 回答 2

3

你的脚本工作得很好。它会更改目录,但在执行脚本时您看不到它。执行脚本后,旧工作目录将再次生效。

如果您想确保确实如此,那么您可以尝试以下操作:

#!/bin/tcsh
alias ts 'cd /path/goswami/; echo `pwd`'
ts

它将/path/goswami作为输出打印。

更新:但是,如果您想更改脚本“外部”的目录,则根本不要使用该脚本。只需定义您的别名并使用它而不是调用您的脚本。

于 2013-09-14T15:01:06.723 回答
1

我认为这个问题是关于执行脚本和采购脚本之间的区别。

如果您通过设置可执行权限来执行脚本,然后通过它的完整路径或相对路径调用它,或者如果它在您的 PATH 中,则仅通过名称调用它,那么将创建一个新的 shell 进程来解释脚本(确定 shell 类型通过脚本开头的晦涩#!/bin/xxx)。

如果您使用source关键字或 . 语法,即其中之一:

source test.sh
. test.sh

...然后文件将在当前的 shell中被读取和执行。

以下是我能想到的使用源代码而不是执行脚本的一些含义:

  • 在脚本完成“执行”后,脚本中设置的环境变量和其他 shell 变量仍然可用。
  • 如果您从源脚本调用 exit,它将终止调用脚本或 shell。
  • 您不会增加启动新 shell 进程的开销。对于少数调用,这可能会让您不感兴趣,但是当多次循环脚本时,开销会增加。

看起来您想要获取脚本而不是执行它。

于 2014-05-12T06:27:21.200 回答