Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从csh到bash,并重新生成相同的文件_Bash_Csh - Fatal编程技术网

从csh到bash,并重新生成相同的文件

从csh到bash,并重新生成相同的文件,bash,csh,Bash,Csh,我有一个bash文件需要获取源代码。用户可能在不知道(默认配置)的情况下拥有csh,因此我想将shell更改为bash,但源文件是用户的意图 这方面有很多帮助,产生的代码如下: #!/bin/csh (AND bash!) [ "$?shell" = "1" ] && bash --login -c 'source this_file; bash' && exit ... 除了源文件这个文件必须硬编码之外,一切都按预期进行。在csh中,$\u将包含source此

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

这方面有很多帮助,产生的代码如下:

#!/bin/csh (AND bash!)
[ "$?shell" = "1" ] && bash --login -c 'source this_file; bash' && exit
...
除了源文件
这个文件必须硬编码之外,一切都按预期进行。在csh中,
$\u
将包含
source此\u文件
,因为这是启动脚本源代码的命令,但我无法将其传递给bash命令

这意味着:

  • 如果我使用:

    ... && set this_file=($_) && bash -c "$this_file; bash" && ...
    ... && bash -c ""$_"; bash" && ... 
    ... && bash --login -c "$_; bash" && ... 
    bash会抱怨括号错误(当bash第二次启动并试图源代码
    此文件时,就会发生这种情况)

  • 如果我使用:

    ... && set this_file=($_) && bash -c "$this_file; bash" && ...
    ... && bash -c ""$_"; bash" && ... 
    ... && bash --login -c "$_; bash" && ... 
    bash得到一个坏掉的命令,该命令也不起作用:
    bash-c“source”“this_file”“;bash”

  • 如果我使用:

    ... && set this_file=($_) && bash -c "$this_file; bash" && ...
    ... && bash -c ""$_"; bash" && ... 
    ... && bash --login -c "$_; bash" && ... 
    csh得到一个中断的命令:`Unmatched'

  • 我找不到如何在接受的bash语法中使用
    $\u
    ,该语法将值作为单个命令传递(即
    bash-c“sourcethis\u file;bash”

    这就是测试:

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

    我很确定它过去是有效的……我现在正在试图找出为什么它现在不起作用。(我使用tcl模块包解决了这个问题,但我会尝试一下)

    可以将参数传递给
    bash-c'cmd'
    构造,即
    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
    

    可以将参数传递给
    bash-c'cmd'
    构造,即
    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
    

    $0不会给你访问脚本名称的权限吗?@kdubs不会,因为它是源代码。dang,你是对的。它会显示原始程序。当时没有权限尝试。我不确定我是否理解,但为什么
    “$”bash“
    ”而不仅仅是
    ”$;bash“
    ?@244an csh在报价方面有一些问题。如果你尝试一下,你会得到无与伦比的
    错误,$0不会给你访问脚本名称的权限吗?@kdubs不会,因为它是源代码。dang,你是对的。它会显示原始程序。当时没有权限尝试。我不确定我是否理解,但为什么
    ”“$”bash“而不仅仅是
    ”$;bash”
    ?@244an csh在报价方面有一些问题。如果你尝试一下,你会得到不匹配的
    错误。这听起来很有希望,但我没有意识到。我现在无法让它工作(不是evan我以前的解决方案:-/)。一旦我验证了它的有效性,我将接受答案。这听起来很有希望,但我没有意识到。我现在无法使它有效(不是evan我以前的解决方案:-/)。一旦我验证了它的有效性,我将接受答案。