标签: bash-scripting

在 bash 脚本中调用源文件的函数

我有一个 bash 文件,src-useful.bash包含有用的函数,例如say_hello(),位于 /path/to/useful 中。

在我的中~/.bash_profile我添加了以下几行:

export BASH_USEFUL=/path/to/useful
source $BASH_USEFUL/src-useful.bash
Run Code Online (Sandbox Code Playgroud)

打开新终端我可以检查以下内容:

$ echo $BASH_USEFUL
/path/to/useful

$ cat $BASH_USEFUL/src-useful.bash
function hello() {
    echo "hello!"
}

$ hello
hello!
Run Code Online (Sandbox Code Playgroud)

我创建了一个脚本say_hello.sh:

$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
hello

$ ./say_hello.sh
BASH_USEFUL: /path/to/useful  # Recognizsed
say_hello.sh: line 2: say_hello: command not found  # Not recognized?
Run Code Online (Sandbox Code Playgroud)

如果我来源$BASH_USEFUL/src-useful.bash它say_hello.sh会工作但是:

$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
source $BASH_USEFUL/src-useful
say_hello

$ ./say_hello.sh
BASH_USEFUL: /path/to/useful  # Recognized
hello! …
Run Code Online (Sandbox Code Playgroud)

export environment-variables bash-scripting

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

当按下 ctrl+c 时,仅中断当前函数,而不是整个 bash 脚本

我正在尝试编写一个脚本,其中如果有人按下CTRL+ C(键盘中断),那么它不应该退出整个脚本,而只是退出当前的执行函数。

谁能建议我在这里可以使用什么逻辑?这是相同的一些示例代码

#!/bin/bash

func1()
{
wget https://example.com/test1.txt
cat text1.txt |awk '{print $3}'|tr -d '.' > temp1.txt
}

func2()
{
cat temp1.txt|<stdin-to-some-tool> > temp2.txt
}

func3()
{
<some-tool> temp2.txt > temp3.txt
}
Run Code Online (Sandbox Code Playgroud)

同样,如果我们在此之前停止该函数,其他函数仍应执行。

linux bash command-line shell-script bash-scripting

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

如何下载 YouTube 视频的一部分

我经常遇到需要裁剪部分内容的 YouTube 视频,但这些视频可能很长,而下载整个视频只是为了处理其中的一小部分会花费太长时间并且非常浪费。

尽管自 2013 年以来就出现了youtube-dl关于此问题的 Github 问题,并且在这方面取得了一些进展,但尚未实现任何目标,并且截至 2021 年,此功能仍然不可用。

还有哪些其他解决方案可以仅下载我需要的视频部分?

video bash ffmpeg bash-scripting youtube-dl

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

将目录附加到 PATH

我正在尝试在本地向全局$PATH变量添加一个目录。我将以下内容添加到我的.bashrc.

export PATH=$PATH:$VRS/bin
Run Code Online (Sandbox Code Playgroud)

但PATH似乎每次我打开一个外壳时都会一遍又一遍地连接到自身(即PATH不断增长)。有任何想法吗?

bash bashrc bash-scripting

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

如何制作一个用今天的日期命名文件的 bash 脚本

我正在尝试制作一个脚本来备份我的服务器,但我对 bash 脚本的了解非常有限。我希望脚本将备份文件命名为 ht-“今天的日期”。我该怎么做?是否可以将命令(例如 date 命令)用作变量?

script bash shell bash-scripting

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

apt-get 请求的脚本回答“要继续在 bash 中输入短语‘是的,按我说的做!’”

我的脚本正在 chroot 中用 systemd 替换 sysvinit,同时使用 debootstrap 构建 debian 映像。

由于这是一个“危险”的动作,apt-get 会问一个愚蠢的问题:“要继续输入‘是的,按我说的做!’”

我该如何编写对此的回复?

编辑:我尝试了所有 -y --yes --force-yes 选项,但它们不起作用。

debian bash debootstrap bash-scripting apt

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

如何在命令提示符下复制期间重命名文件

我想在更改文件名的同时将文件从一个文件夹复制到另一个文件夹。我怎样才能做到这一点?

例如:使用此名称复制1.txt到: 。C:\new folder2.bat

batch command-line rename bash-scripting

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

if 命令中的测试条件

知道为什么echo在这两种情况下都执行语句吗?

输出it worked:

#!/bin/bash

rizwan=''
if [ -n $rizwan ]; then
  echo "it worked"
fi
Run Code Online (Sandbox Code Playgroud)

替换-n为-z, 并it worked在不期望输出时输出:

#!/bin/bash

rizwan=''
if [ -z $rizwan ]; then
  echo "it worked"
fi
Run Code Online (Sandbox Code Playgroud)

linux bash bash-scripting

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

Bash [[ test =~ regex ]] 与 perl 命令结果

bash 运算符=~相当于perl调用吗?

filename="test-33.csv"
regex="([^.]+)(-\d{1,5})(\.csv)"
Run Code Online (Sandbox Code Playgroud)

通过 bash 测试:

filename="test-33.csv"
regex="([^.]+)(-\d{1,5})(\.csv)"
Run Code Online (Sandbox Code Playgroud)

和perl:

if [[ "$filename" =~ $regex ]]; then echo "it matches"; else echo "doesn't match"; fi
# doesn't match

if [[ "$filename" =~ ([^.]+)(-\d{1,5})(\.csv) ]]; then echo "matches"; else echo "doesn't match"; fi
# doesn't match
Run Code Online (Sandbox Code Playgroud)

我对 bash 操作符有什么遗漏吗=~?这与贪婪与非贪婪迭代器 ( ) 有关系吗[^.]+?

bash regex perl bash-scripting

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

为什么我不能删除带有 Bash 脚本的文件?

我似乎无法rm从 Bash 脚本运行并删除文件。

#!/bin/bash
rm -rf myjunk.out
exit 0;
Run Code Online (Sandbox Code Playgroud)

不会删除myjunk.out.

bash-scripting

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