AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[bash-functions](unix)

Martin Hope
Viet
Asked: 2018-11-02 06:18:55 +0800 CST

带有 if 的 Bash 函数然后返回命令未找到

  • -1

我正在尝试编写一个执行此操作的函数:

$ test-function -u {local-path} {destination}

如果第一个参数是-u,则执行一个函数,该函数将接下来的 2 个参数作为要上传/复制/rsync 的文件的路径和目标。

$ test-function -d {local-path} {destination}

如果第一个参数不是-u(或它是-d),则执行一个函数,该函数将接下来的 2 个参数作为要下载/复制/rsync 的文件的路径(假设我在当前文件夹中)和目标。

我在这里和这里找到了建议解决方案的答案。但是,我的函数.bash_profile返回如下错误:

function test_func {
    local a="$1"
    local a="$2"

    if ( a == "-u" ); then
        echo "This means upload"
    else
        echo "This means download"
    fi
}

alias test-function="test_func"

然后:

$ test-function -u
-bash: a: command not found
This means download
$ test-function -d
-bash: a: command not found
This means download

如果我将代码更改为:

if [[a == "-u"]]; then
...

有时候是这样的:

$ test-function -u
-bash: [[a: command not found
This means download

如果我根据我找到的答案之一更改代码:

if ((a == "-u")); then
...

有时候是这样的:

line 53: syntax error near unexpected token `}'

我猜这个错误与 double 有关((...))。你怎么做呢?

bash bash-functions
  • 2 个回答
  • 2746 Views
Martin Hope
Alexander Mills
Asked: 2018-07-07 22:55:27 +0800 CST

为 Bash 数组创建包含函数

  • 1

我有这个包含函数,它应该检查数组是否具有特定值。数组本身作为第一个参数传递,值是第二个参数。

#!/usr/bin/env bash

set -e;

branch_type="${1:-feature}";
arr=( 'feature', 'bugfix', 'release' );

contains() {
    local array="$1"
    local seeking="$2"
    echo "seeking => $seeking";
#    for v in "${!array}"; do
     for v in "${array[@]}"; do
        echo "v is $v";
        if [ "$v" == "$seeking" ]; then
         echo "v is seeking";
            return 0;
        fi
    done
   echo "returning with 1";
   return 1;
}

if ! contains "$arr" "$branch_type"; then
    echo "Branch type needs to be either 'feature', 'bugfix' or 'release'."
    echo "The branch type you passed was: $branch_type"
    exit 1;
fi

echo "all goode. branch type is $branch_type";

如果您在没有任何参数的情况下运行脚本,它应该可以工作,因为默认值为“功能”,但由于某种原因,搜索不匹配任何内容。我没有收到错误消息,但包含的功能没有按预期工作。

当我运行不带任何参数的脚本时,我得到:

seeking => feature
v is feature,
returning with 1
Branch type needs to be either 'feature', 'bugfix' or 'release'.
The branch type you passed was: feature

现在这很奇怪

bash bash-functions
  • 2 个回答
  • 1353 Views
Martin Hope
jalanb
Asked: 2018-05-31 05:05:36 +0800 CST

为什么声明 -F 给出错误的文件

  • 6

我有 2 个小函数可以缩写set -x/ set +x,即:

sx () {
    export PS4='+ [${BASH_SOURCE##*/}:${LINENO}]'
    set -x
}

和

sz () {
    set +x
    export PS4=
}

这 2 个函数位于一个文件中,该文件functons.sh是source d from ,并且可以在此处~/.bashrc在线查看。

登录到新的 bash 会话后,我立即尝试找出sz()函数的位置,如下所示:

$ shopt -s extdebug; declare -F sz; shopt -u extdebug
sz 25 /Users/jab/src/git/hub/jab/src/bash/keyboard/z.sh

这表明bash认为sz()函数是在 中声明的z.sh,但在那一行有一个不同的函数,zzz(),在线here。

该sx()函数(以及我所有的无数其他函数)的结果是正确的

$ shopt -s extdebug; declare -F sx; shopt -u extdebug
sx 428 /Users/jab/src/git/hub/jab3/src/bash/functons.sh

为什么该declare -F命令会得到sz函数的错误结果?

bash bash-functions
  • 1 个回答
  • 480 Views
Martin Hope
alhelal
Asked: 2018-03-19 02:08:43 +0800 CST

如何从bash中的另一个用户定义函数调用用户定义函数?

  • -2

我想做这个 -

function swap(){ mv $1 $1._tmp && mv $2 $1 && mv $1._tmp $2; }
function alterpdf(){ swap(titlepage_$1.tex titlepage_$2.tex); swap(titlepage_$1.pdf,titlepage_$2.pdf); pdflatex allTitle    page.tex; }  

我的swap功能运行良好。现在,我想在swap函数内部使用alterpdf函数。但是,这会产生错误——

在此处输入图像描述

bash-functions
  • 1 个回答
  • 203 Views
Martin Hope
user9303970
Asked: 2018-03-05 21:16:26 +0800 CST

如何在一行中导出文件中的所有 Bash 函数?

  • 7

在 Ubuntu 16.04 中,我有一个 Bash 文件,其中包含一些不同的函数,用于在我的系统上自动执行各种常见任务。

我已经获取了该文件,bashrc因此我可以在需要时从终端的任何位置轻松调用每个函数,因此我们可以说“函数本身是有源的”。

有时我需要从脚本内部使用这些源函数之一,并且我需要使用以下命令启动此操作:

export -f myFunc_0 myFunc_1 myFunc_2 ...

否则,我将无法使用这些功能。


在不注意特定功能的情况下,我如何才能对文件中的所有功能进行启动?

bash bash-functions
  • 6 个回答
  • 7278 Views
Martin Hope
user9303970
Asked: 2018-03-04 20:33:58 +0800 CST

创建别名的 Bash 函数被无休止地调用

  • 1

我运行了以下 Bash 函数,该函数将带有扩展变量的字符串添加到 my 的末尾bashrc:

alias() {
    echo "alias $repo=\"$HOME\"/$repo/$repo.sh" >> "$HOME"/.bashrc
    source "$HOME"/.bashrc 2>/dev/null
}
alias

为了运行它,我复制了它,粘贴到 Bash 终端(它出现过一次)并通过点击执行Enter。

我得到的输出~/.bashrc是上面字符串的大约一千行:

别名 $repo=\"$HOME\"/$repo/$repo.sh

最后一个命令 ( source /home/user/.bashrc) 一直在无休止地执行(我假设是由于对函数的无休止调用)所以我立即用^C组合键中止了。


在用 Nano 和 cut 操作删除了字符串的所有数千个重复之后mark-set,我想问为什么会发生这种情况(并继续发生)?

command-line bash-functions
  • 1 个回答
  • 184 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve