相关疑难解决方法(0)

385
推荐指数
13
解决办法
19万
查看次数

Bash函数中的返回值

我正在使用bash脚本,我想执行一个函数来打印返回值:

function fun1(){
  return 34
}
function fun2(){
  local res=$(fun1)
  echo $res
}
Run Code Online (Sandbox Code Playgroud)

当我执行时fun2,它不会打印"34".为什么会这样?

bash function return-value

267
推荐指数
9
解决办法
33万
查看次数

在BASH中,是否可以在函数体中获取函数名称?

在BASH中,是否可以在函数体中获取函数名称?以下面的代码为例,我想在其正文中打印函数名"Test",但"$ 0"似乎是指脚本名而不是函数名.那么如何获取函数名称?

#!/bin/bash

function Test
{
    if [ $# -lt 1 ]
    then
        #   how to get the function name here?
        echo "$0 num" 1>&2
        exit 1
    fi
    local num="${1}"
    echo "${num}"
}

#   the correct function
Test 100

#   missing argument, the function should exit with error
Test

exit 0
Run Code Online (Sandbox Code Playgroud)

bash shell

46
推荐指数
2
解决办法
2万
查看次数

有没有办法在zsh中获取函数调用者名称

我想在shell脚本中获取函数调用者名称,在bash中可以使用 ${FUNCNAME[1]}

${FUNCNAME[1]} 是(来电者姓名)

${FUNCNAME[0]} 是c(现在的名字)

但它不适用于zsh

即我想知道哪个函数在函数c中调用我

function a(){
    c
}

function b(){
    c
}

function c(){
     #if a call me; then...
     #if b call me; then...
}
Run Code Online (Sandbox Code Playgroud)

bash shell zsh

7
推荐指数
2
解决办法
1065
查看次数

为什么在STDERR线之后打印STDOUT线?

我完全不理解这种行为.

我有一个非常简单的Perl脚本:

#!/usr/bin/perl

use strict;
use warnings;

print "line 1\n";
print STDERR "line 2\n";
Run Code Online (Sandbox Code Playgroud)

如果我从控制台运行它,我会得到我期望的:

$ perl a.pl
line 1
line 2
Run Code Online (Sandbox Code Playgroud)

但如果我将其重定向到文件,我将按相反的顺序获取行:

$ perl a.pl &> a
$ cat a
line 2
line 1
Run Code Online (Sandbox Code Playgroud)

如何以与控制台中相同的顺序将所有输出STDOUT + STDERR捕获到文件中?

bash perl stdout stderr io-redirection

4
推荐指数
1
解决办法
320
查看次数

在采购后,如何阻止.bashrc中的变量在shell中可见?

作为一个实例,我.bashrc使用以下方式的相对路径,虽然我的问题是关于使用的任何临时变量源其他脚本.bashrc.

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source $DIR/.somefile

现在我把DIR每一个壳弄得乱七八糟.没有明确unset DIR的结尾.bashrc,有没有办法限制变量的范围?

[ 编辑 ]要查看列表:( set -o posix ; set ) | less

bash scope

4
推荐指数
1
解决办法
500
查看次数