3

我必须获取一个 tcsh 脚本来修改环境变量。

需要进行一些测试,如果任何测试失败,采购将停止而不退出外壳。我不想将脚本作为子进程运行,因为我需要在父进程中修改子进程无法执行的环境变量。这与作者实际上可以将脚本作为子进程运行的这个问题相似但不同。

通常的解决方法是创建一个运行脚本 (csh/bash/perl/python/...) 的别名,该脚本使用所有 env var 设置写入一个临时文件,并在最后源并删除该临时文件。这里有更多信息供感兴趣的人使用(演示 bash 的解决方案)。对于我非常简单和简短的东西,我不需要额外的别名。

所以我的解决方法是引发语法错误,停止任何source执行。这是一个例子:

test $ADMIN_USER = `filetest -U: $SOME_FILE` || "Error: Admin user must own admin file"

在好的情况下,短路||会导致错误文本被忽略。在测试失败时,错误文本被解释为命令,未找到,源停止并产生合理的错误消息:

Error: Admin user must own admin file: Command not found.

有没有更好的方法来做到这一点?我忽略了一些内置的 csh/tcsh?

4

1 回答 1

3

感谢与用户 shellter的讨论,我刚刚验证了我的假设

test $ADMIN_USER = `filetest -U: $SOME_FILE` || \
  echo "Error: Admin user must own admin file" && \
    exit

实际上会退出封闭的交互式外壳。但事实并非如此。

所以我上面的问题的答案实际上是:

只需使用正常exit的,source将停止获取脚本,同时保持调用交互式 shell 运行。

于 2012-05-09T13:10:19.587 回答