我有以下代码片段:
#!/bin/ksh source /users/some_user/.cshrc
但是,运行它会产生source: not found
错误.
我也试过使用dot
像这样的运算符:
#!/bin/ksh . /users/some_user/.cshrc
但是,这也不能解决问题,尽管它不再给我source: not found
错误.
获取.cshrc
文件的正确方法是什么?
要读入文件ksh
,.
(点)命令是正确的.只bash
添加source
从中借来的命令csh
,但它是一个罗嗦的同义词.
.
你剩余的问题是,这是要读取的文件应该是一个ksh
文件,而不是一个csh
文件-在C shell文件(如符号setenv
)与那些在POSIX壳(使用完全不同的bash
,ksh
等等).因此,你面临着一项艰巨的任务.
解决这个问题的一种方式(麻烦!)是:
$ exec csh % source /users/some_user/.cshrc % exec ksh $ ...continue with the environment set by the .cshrc file...
这样做的缺点是exec
操作必须是手动执行的(或者至少很难以编程方式执行).另一种方法是将.cshrc
文件转换为ksh
符号(使用export VAR=value
而不是setenv VAR value
等).
如果要自动化它,翻译.cshrc
文件可能是最好的方法.
csh
到ksh
作为一个非常粗略,简单的起点,请考虑:
#!/usr/bin/env perl use strict; use warnings; while (<>) { next if m/^#/; chomp; if (m/^\s* setenv \s+ (\w+) \s+ (.+) $/x) { my($var, $val) = ($1, $2); $val = "\"$val\"" unless $val =~ m/^"/; print "export $var=$val\n"; } }
给定一个.cshrc
文件包含:
# comment setenv VAR value setenv VAR_2 "value with spaces"
输出是:
export VAR="value" export VAR_2="value with spaces"
这可能不够,但它可能是让你前进的充分开始.