小编Mor*_*rad的帖子

当我使用bash脚本时,$ 0不起作用

我有一个简单的脚本test.sh

#!/bin/bash
echo $0
Run Code Online (Sandbox Code Playgroud)

当我从csh终端运行以下命令时:

bash -c 'test.sh'
Run Code Online (Sandbox Code Playgroud)

然后输出是 test.sh

但是当我跑步时:

bash -c 'source test.sh'
Run Code Online (Sandbox Code Playgroud)

输出是 bash

在这种情况下,有人知道如何打印脚本名称吗?

bash csh

10
推荐指数
2
解决办法
3045
查看次数

如何知道调用函数的perl模块或文件

我需要知道我的函数调用了哪个perl文件.假设我有以下模块(MyModule.pm),它具有以下功能:

package MyModule;

sub myFunc{
   # Here I need to print the name of the file that the function was called from
}
Run Code Online (Sandbox Code Playgroud)

并且脚本myScript.pl使用MyModule并调用函数myFunc():

use MyModule;
MyModule->myFunc();
Run Code Online (Sandbox Code Playgroud)

我需要打电话到myFunc()这里打印" myScript.pl"

在Perl中有没有办法做到这一点?

perl

3
推荐指数
1
解决办法
357
查看次数

bash不按顺序运行命令

我有一个包含以下内容的bash脚本:

MY_COMMAND="MY_PWD=`pwd`; export MY_PWD; MY_PWD_BASENAME=`basename $MY_PWD`; echo $MY_PWD_BASENAME"; export MY_COMMAND
Run Code Online (Sandbox Code Playgroud)

当我从终端源脚本时,我收到以下错误:

basename: missing operand
Try `basename --help' for more information.
Run Code Online (Sandbox Code Playgroud)

这表示命令MY_COMMAND不按顺序执行.这里发生了什么?

bash command-substitution

2
推荐指数
1
解决办法
422
查看次数

从Perl运行命令时,分段错误消失

我有一个简单的c ++程序,它引发了SIGSEGV:

#include <iostream>
#include <signal.h>

int main() {
    std::cout << "Raising seg fault..." << std::endl;
    raise(SIGSEGV);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行此程序时,我得到以下输出

Raising seg fault...
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

但是当我使用管道在perl脚本中运行我的程序时,分段错误消失了.这是我的Perl脚本:

use strict;
use warnings;


my $cmd ="./test";

open (OUTPUT, "$cmd 2>&1 |") || die();
while (<OUTPUT>) {
      print;
}
close (OUTPUT);
my $exit_status = $?>>8;
print "exit status: $exit_status\n";
Run Code Online (Sandbox Code Playgroud)

运行脚本时,我得到以下输出:

Raising seg fault...
exit status: 0
Run Code Online (Sandbox Code Playgroud)

怎么可能这样呢?分段错误在哪里?为什么退出状态为0?

perl exit-code segmentation-fault child-process

2
推荐指数
1
解决办法
181
查看次数