【问题标题】:Execute alias in tcsh script在 tcsh 脚本中执行别名
【发布时间】:2013-09-14 14:38:54
【问题描述】:

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

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

【问题讨论】:

  • 你为什么认为它没有执行?
  • 更新问题,执行命令。正在执行脚本

标签: linux shell tcsh


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 有没有办法阻止旧工作目录的影响。你能提供更多为什么会发生。
  • 我正在编写包含大量别名的脚本。它就是示例之一。所以我需要使用脚本
  • 那么您不能更改调用脚本的 shell 的目录。您只能在执行脚本的子 shell 中更改它。没有办法解决这个问题。但是,只需在您的脚本中执行所有操作。
【解决方案2】:

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

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

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

source test.sh
. test.sh

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

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

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

您似乎想要获取脚本而不是执行它。

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多