我有一个 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) 我正在尝试编写一个脚本,其中如果有人按下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)
同样,如果我们在此之前停止该函数,其他函数仍应执行。
我经常遇到需要裁剪部分内容的 YouTube 视频,但这些视频可能很长,而下载整个视频只是为了处理其中的一小部分会花费太长时间并且非常浪费。
尽管自 2013 年以来就出现了youtube-dl关于此问题的 Github 问题,并且在这方面取得了一些进展,但尚未实现任何目标,并且截至 2021 年,此功能仍然不可用。
还有哪些其他解决方案可以仅下载我需要的视频部分?
我正在尝试在本地向全局$PATH变量添加一个目录。我将以下内容添加到我的.bashrc.
export PATH=$PATH:$VRS/bin
Run Code Online (Sandbox Code Playgroud)
但PATH似乎每次我打开一个外壳时都会一遍又一遍地连接到自身(即PATH不断增长)。有任何想法吗?
我正在尝试制作一个脚本来备份我的服务器,但我对 bash 脚本的了解非常有限。我希望脚本将备份文件命名为 ht-“今天的日期”。我该怎么做?是否可以将命令(例如 date 命令)用作变量?
我的脚本正在 chroot 中用 systemd 替换 sysvinit,同时使用 debootstrap 构建 debian 映像。
由于这是一个“危险”的动作,apt-get 会问一个愚蠢的问题:“要继续输入‘是的,按我说的做!’”
我该如何编写对此的回复?
编辑:我尝试了所有 -y --yes --force-yes 选项,但它们不起作用。
我想在更改文件名的同时将文件从一个文件夹复制到另一个文件夹。我怎样才能做到这一点?
例如:使用此名称复制1.txt到: 。C:\new folder2.bat
知道为什么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) 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 操作符有什么遗漏吗=~?这与贪婪与非贪婪迭代器 ( ) 有关系吗[^.]+?
我似乎无法rm从 Bash 脚本运行并删除文件。
#!/bin/bash
rm -rf myjunk.out
exit 0;
Run Code Online (Sandbox Code Playgroud)
不会删除myjunk.out.
bash-scripting ×10
bash ×7
command-line ×2
linux ×2
apt ×1
bashrc ×1
batch ×1
debian ×1
debootstrap ×1
export ×1
ffmpeg ×1
perl ×1
regex ×1
rename ×1
script ×1
shell ×1
shell-script ×1
video ×1
youtube-dl ×1