从csh到bash并重新获取相同的文件

时间:2013-02-18 14:06:07

标签: bash csh

我有一个需要获取源代码的bash文件。用户可能在不知道的情况下拥有csh(默认配置),所以我想将shell更改为bash,但是根据用户的意图来源文件。

围绕这个有很多帮助,结果代码是:

#!/bin/csh (AND bash!)
[ "$?shell" = "1" ] && bash --login -c 'source this_file; bash' && exit
...

除了必须硬编码源文件this_file这一事实外,一切都按预期工作。在csh $_中将包含source this_file,因为这是开始寻找脚本的命令,但我无法将其传递给bash命令。

这意味着:

  1. 如果我使用:

    ... && set this_file=($_) && bash -c "$this_file; bash" && ...

    bash会抱怨括号错了(第二次发生这种情况,因为bash已经启动并尝试获取this_file

  2. 如果我使用:

    ... && bash -c ""$_"; bash" && ... 

    bash会收到一个无效的命令:bash -c "source" "this_file" "; bash"

  3. 如果我使用:

    ... && bash --login -c "$_; bash" && ... 

    csh得到一个破坏的命令:“无与伦比”。

  4. 我无法找到如何将$_与接受的bash语法一起使用,该语法将值作为单个命令传递(即bash -c "source this_file; bash"

    这是测试:

    cat >a.sh<<'EOF'
    [ "$?shell" = "1" ] && bash --login -c 'source a.sh; bash' && exit
    a=1
    EOF
    

    然后我希望这可行:

    $ csh -c 'source a.csh'
    $ echo $a
    1
    

    我很确定它曾经工作过......我正试图找出它为什么现在没有。 (我使用tcl模块包解决了这个问题,但我会试一试)

1 个答案:

答案 0 :(得分:1)

可以将参数传递给bash -c 'cmd'构造,i。即bash -c 'echo $@' arg0 1 2 3 4 5

#!/bin/csh (AND bash!)
#[ "$?shell" = "1" ] && bash --login -c 'source this_file; bash' && exit
[ "$?shell" = "1" ] && bash --login -c '${@}; bash' arg0 $_ && exit