【问题标题】:Sourcing a file in a new tcsh shell and getting the aliases to work在新的 tcsh shell 中获取文件并让别名工作
【发布时间】:2019-01-09 22:36:28
【问题描述】:

我想在新的 tcsh shell 中获取文件。

我可以跑:

#!/usr/bin/env tcsh
konsole --close -e tcsh -exec "ls -l;exec tcsh"

这将打开一个新的 konsole,列出所有文件并保持 shell 交互。

但是,当我尝试时:

#!/usr/bin/env tcsh
konsole --close -e tcsh -exec "source /tmp/1234.sh;exec tcsh"

我得到了所有的环境变量,但没有得到别名。

例如: 在 /tmp/1234.sh:我有:

...
setenv MAYA "/maya/path";
alias may 'source /X/tools/binlinux/myscript.tcsh getDirectory ${MAYA} \!*';
...

现在在我的新外壳中:

$env | grep 'MAYA'

将输出正确的“MAYA”环境 但是:

$may

可能:找不到命令。

所有别名都不起作用

如果我执行:

$source /tmp/1234.sh

在新的 shell 中,所有别名都可以正常工作。

请注意,我无法将数据存储在任何文件中,例如 .tchrc 或更改 /tmp/1234.sh 文件的格式。

如何让别名在新的 shell 中工作?

【问题讨论】:

  • 我使用的是 Linux Centos 6

标签: shell environment-variables alias tcsh


【解决方案1】:

exec 用新进程替换当前进程。 source 命令在旧进程中运行,新进程不继承旧进程的状态(环境变量除外)。

做你想做的最简单的方法是设置一个环境变量,并在你的 tcshrc 文件中改变它的行为;例如:

#!/bin/sh
export FOO=bar
konsole --close -e tcsh

然后在你的 tcshrc 中选择:

if ( $?FOO ) then
    setenv MAYA "/maya/path";
    alias may 'source /X/tools/binlinux/myscript.tcsh getDirectory ${MAYA} \!*';
endif

没有真正的方法可以告诉 tcsh 从另一个位置读取配置。我曾经为此发送过一个补丁,但被拒绝了。

【讨论】:

  • 感谢您优雅的解决方案。问题是我无法编辑 .tcshrc 文件。原因是 /tmp/1234.sh 文件是由 studio 脚本生成的。每次工作室脚本接受不同的输入时,它都会生成一个不同的 /tmp/1234.sh 文件。许多用户都使用工作室脚本,我将无法创建修改他们的 .tchrc 文件的脚本。
  • 我们可以修改:别名可能'source /X/tools/binlinux/myscript.tcsh getDirectory ${MAYA} \!*';在脚本中以便获取源代码?
  • 请注意,有一个系统范围的/etc/csh.cshrc 文件可供所有 用户@AlIbrahim 读取,您可以将其放入其中。您还可以将文件名作为环境变量传递。
  • 非常感谢。它确实使用我的 .tcshrc 文件工作。我正在让我们的系统管理员将其添加到 /etc/csh.cshrc 文件中。
  • 是否有其他方法可以在不更改 .tcshrc 或 /etc/csh.cshrc 的情况下这样做?我无法为所有用户更改这些文件。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多