当前位置:  开发笔记 > 编程语言 > 正文

从ksh获取包含env变量的文件

如何解决《从ksh获取包含env变量的文件》经验,为你挑选了1个好方法。

我有以下代码片段:

#!/bin/ksh

source /users/some_user/.cshrc

但是,运行它会产生source: not found错误.

我也试过使用dot像这样的运算符:

#!/bin/ksh

. /users/some_user/.cshrc

但是,这也不能解决问题,尽管它不再给我source: not found错误.

获取.cshrc文件的正确方法是什么?



1> Jonathan Lef..:

要读入文件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文件可能是最好的方法.


从超简单的转换cshksh

作为一个非常粗略,简单的起点,请考虑:

#!/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"

这可能不够,但它可能是让你前进的充分开始.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有