1

我正在编写一个 bash 脚本(称为gotodir.sh)并且想在脚本过程中更改目录,具体取决于一些变量,比如cd /home/username/${FOO}/${BAR}.

当进程退出时,仅按原样运行它是行不通的,因为目录仅在子shell中更改。

我的外壳是 tcsh。(是的,我知道...不是我的选择。)在我的.cshrc文件中,我想将关键字gotodir别名为gotodir.sh

我已经读过使用.orsource前缀执行脚本将导致脚本在同一个 shell 中运行(即不是子 shell)。

我尝试将以下内容放入我的.cshrc文件中:

alias gotodir . /home/username/bin/gotodir.sh

但这会导致错误:/bin/.: Permission denied.

我也尝试过使用source而不是.

alias gotodir source /home/username/bin/gotodir.sh

但这会导致错误:if: Expression Syntax.

如何在运行 tcsh 时使用 bash 脚本完成此操作?

4

1 回答 1

3

当您source从 tcsh 获取文件时,它 tcsh 运行命令。被#!忽略为注释,因为您没有将文件作为脚本运行,只是从中读取命令,就好像它们是在 shell 提示符下输入的一样。

你的使命注定要失败。只有 tcshcd命令可以更改 tcsh 进程的当前目录。

但是,如果您愿意稍微弯曲一点,您可以编写一个脚本,该脚本作为一个单独的进程运行并将目录名称输出cd到。然后设置别名

alias gotodir 'cd `/blah/blah/thescript`'

附录

添加参数是可能的,但很棘手。别名参数看起来像历史扩展,!:1扩展到第一个参数。但是引号不能保护!角色。您必须反斜杠以防止它在创建别名期间被扩展,因此它可以在别名执行期间完成其工作。

alias gotodir 'cd `/blah/blah/thescript \!:1`'

处理带有空格的参数和目录可能需要额外的引用。

于 2013-07-19T01:13:52.583 回答