我有以下代码片段:
#!/bin/ksh
source /users/some_user/.cshrc
Run Code Online (Sandbox Code Playgroud)
但是,运行它会产生source: not found错误.
我也试过使用dot像这样的运算符:
#!/bin/ksh
. /users/some_user/.cshrc
Run Code Online (Sandbox Code Playgroud)
但是,这也不能解决问题,尽管它不再给我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...
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是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";
}
}
Run Code Online (Sandbox Code Playgroud)
给定一个.cshrc文件包含:
# comment
setenv VAR value
setenv VAR_2 "value with spaces"
Run Code Online (Sandbox Code Playgroud)
输出是:
export VAR="value"
export VAR_2="value with spaces"
Run Code Online (Sandbox Code Playgroud)
这可能不够,但它可能是让你前进的充分开始.