【问题标题】:Return value to csh script using Perl使用 Perl 将值返回给 csh 脚本
【发布时间】:2025-04-10 02:35:02
【问题描述】:

我写了一个 Perl 脚本,它返回 1 或 0 取决于它是否失败/成功。我有一个读取返回值的 .csh shell 脚本。

.csh 命令是这样的:

> setenv CHECKER `perl $BIN_DIR/sgRevisionChecker.pl`
if($CHECKER) then
    do stuff
else
    echo 'Successful Run'
exit
endif

但是,即使在 Perl 脚本中我说“退出 1”或“退出 0”,Perl 脚本也不会传递正确的值。

但是,如果在 Perl 脚本中我这样做:

print "1";
exit 1;

然后我的 shell 脚本得到这个值。如果我打印它似乎会获得价值,但我认为这并不可靠,我想以正确的方式去做。我尝试了其他解决方案,但打印似乎是唯一的解决方法。

将值从 Perl 返回到 .csh 脚本的正确方法是什么?

【问题讨论】:

  • 好吧,在 bash 中,RETURN=$( some_script.pl ) 会将 $RETURN 设置为脚本打印的任何内容。正确的做法是some_script.pl; RETURN=$?
  • 快速谷歌:bima.astro.umd.edu/checker/node22.html 你想要 $status 变量。
  • 我没有使用 bash。那是行不通的。我相信我在 tcsh。
  • 输入:“ps -p $$”(不带引号)以获取您正在使用的外壳
  • @CliffordMaxwell 是的,我只是想用我原来的评论给你一个想法。我认为它在 csh 中是相似的。

标签: perl return csh


【解决方案1】:
$BIN_DIR/sgRevisionChecker.pl
if($status) then
    # do stuff
else
    echo 'Successful Run'
    exit
endif

我刚刚尝试过:

$ cat test.sh
#!/bin/bash 

exit 1

$ cat c.sh 
#!/bin/tcsh

./test.sh
if($status) then
    echo 'Fail'
else
    echo 'Successful Run'
endif

$ ./c.sh
Fail

甚至更短:

> perl -e 'exit 1'
> echo $status
1

【讨论】:

  • @CliffordMaxwell 在 tcsh 上为我工作。