我有一个简单的脚本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
在这种情况下,有人知道如何打印脚本名称吗?
我需要知道我的函数调用了哪个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中有没有办法做到这一点?
我有一个包含以下内容的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不按顺序执行.这里发生了什么?
我有一个简单的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?