我正在编写一个bash脚本(名为 gotodir.sh ),并希望在脚本过程中更改目录,具体取决于某些变量,例如cd /home/username/${FOO}/${BAR}
。
当进程退出时,只是按原样运行它,因为目录仅在子shell中更改。
我的shell是tcsh。 (是的,我知道......不是我的选择。)在我的 .cshrc 文件中,我想将关键字 gotodir 别名为 gotodir.sh
我已经读过,使用.
或source
前缀执行脚本会导致脚本在同一个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脚本完成此操作?
答案 0 :(得分:3)
当您从tcsh source
文件时,tcsh运行命令。 #!
被忽略为注释,因为您没有将该文件作为脚本运行,只是从它中读取命令,就像它们是在shell提示符下输入一样。
你的任务注定要失败。只有tcsh cd
命令才能更改tcsh进程的当前目录。
但是如果你愿意弯曲一下,你可以编写一个作为单独进程运行的脚本,并将目录名称输出到cd
。然后设置像
alias gotodir 'cd `/blah/blah/thescript`'
<强>附录强>
添加参数是可能的,但很棘手。别名参数看起来像历史扩展,!:1
扩展到第一个参数。但引号不保护!
字符。您必须反斜杠以防止在创建别名期间扩展它,因此它可以在执行别名期间完成其工作。
alias gotodir 'cd `/blah/blah/thescript \!:1`'
可能需要额外引用来处理带有空格的参数和目录。