Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

1
在Bash中,是否[-z“ $ 1”]和[[$ 1” =“””是否相同?
在Bash Shell脚本中,以下两个语句之间有什么区别(如果有)? 1.) if [ -z "$1" ] 2.) if [ "$1" = "" ] 我发现自己在某些脚本中编写了第二本,但是随后我在这里读到,使用-z可以达到相同的目的。 如果在使用第二个方法时遇到问题,我们是否应该忽略第一个方法看起来更好一些?

3
如何使用脚本实用程序自动记录所有终端会话
我想要实现的是能够在每次使用Yakuake / Konsole时自动记录我的终端会话以归档。 如果在会议开始时我很容易做到: script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log 但是我想在每次启动Yakuake或打开新标签时自动运行以上命令。 使用.bashrc无效,因为它会产生无限循环,因为'script'打开了一个新会话,该会话依次读取.bashrc并启动了另一个'script',依此类推。 因此,大概我需要以某种方式编写脚本Yakuake / Konsole,以在打开新标签页后立即运行“脚本”。问题是如何?

7
bash目录快捷方式
键入时cd ~foo,我希望bash将我带到某个目录,foo作为键入的完整目录路径的快捷方式foo。并且我希望能够cp ~foo/bar.txt ~/bar.txt将文件从/foo/目录复制到主目录...因此,基本上,我想要的功能与之完全相同~/,但是我指定了目录的位置。[我确定我应该jfgi,但我不知道该怎么做]
28 bash 

9
对于Bash中的vs查找
遍历文件时,有两种方法: 使用for-loop: for f in *; do echo "$f" done 用途find: find * -prune | while read f; do echo "$f" done 假设这两个循环将找到相同的文件列表,那么这两个选项在性能和处理方面有何不同?

1
$ _ vs!$。前面命令和输出重定向的最后一个参数
问题是关于特殊变量。文档说: !!:$ 指定前面命令的最后一个参数。可以将其缩短为!$。 ($_,下划线。)在shell启动时,设置为用于调用在环境或参数列表中传递的正在执行的shell或shell脚本的绝对路径名。随后,扩展到扩展后的上一个命令的最后一个参数。还设置为用于调用每个执行的命令的完整路径名,并将其放置在导出到该命令的环境中。 我一定无法捕捉到一些差异,因为: $ echo "hello" > /tmp/a.txt $ echo "!$" echo "/tmp/a.txt" /tmp/a.txt $ echo "hello" > /tmp/a.txt $ echo $_ hello 有什么不同?

3
函数是否在Bash中作为子流程运行?
在Advanced Bash-Scripting Guide中,在示例27-4(从底部开始的第7行)中,我已阅读以下内容: 函数作为子流程运行。 我在Bash中进行了测试,似乎以上陈述是错误的。 在本网站Bash Man和我的搜索引擎上进行的搜索没有任何帮助。 您有答案并想解释吗?
28 bash  process  function 

14
Bash脚本使用FFmpeg将所有* flac转换为* .mp3?
我想将所有* .flac转换为特定文件夹中的* .mp3。 这是我尝试过的,但不起作用: # change to the home directory cd ~/music # convert all *.flac files ffmpeg -i *.flac -acodec libmp3lame *.mp3 # (optional: check whether there are any errors printed on the terminal) sleep 60 如何达到目标?

4
如何“ grep”给定范围内的线长?
注意:此问题是此问答的补充:如何在给定范围内“ grep”表示行长*不是*? 我只需要从长度范围小于或等于3个字符,但不大于或等于10的文本文件(单词列表,用换行符分隔)中获取行。 例: 输入: egyezményét megkíván ki alma kevesen meghatározó 输出: megkíván alma kevesen 问题:我该怎么做bash?
28 bash  sed  grep  perl 


4
插入USB设备时如何执行ShellScript
这个问题是从Stack Overflow 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 6年前。 当我在Linux机器中插入设备时,我想执行脚本。例如,xinput在鼠标或特定驱动器上的备份脚本上运行。 我已经在这里和这里看到了很多有关此的文章。但是我就是无法正常工作。 这是一些简单的示例,试图至少获得某种响应。 /etc/udev/rules.d/test.rules #KERNEL=="sd*", ATTRS{vendor}=="*", ATTRS{model}=="*", ATTRS{serial}=="*", RUN+="/usr/local/bin/test.sh" #KERNEL=="sd*", ACTION=="add", "SUBSYSTEM=="usb", ATTRS{model}=="My Book 1140 ", ATTRS{serial}=="0841752394756103457194857249", RUN+="/usr/local/bin/test.sh" #ACTION=="add", "SUBSYSTEM=="usb", RUN+="/usr/local/bin/test.sh" #KERNEL=="sd*", ACTION=={add}, RUN+="/usr/local/bin/test.sh" KERNEL=="sd*", RUN+="/usr/local/bin/test.sh" KERNEL=="*", RUN+="/usr/local/bin/test.sh" /usr/local/bin/test.sh #!/usr/bin/env bash echo touched >> /var/log/test.log if [ "${ACTION}" = "add" ] && [ …
28 linux  bash  ubuntu  udev 

6
CTRL + C不正确地用于返回命令行吗?
在使用tail -f并且想返回外壳时,我总是使用CTRL+C。或者,当我键入命令并想中止它并重新开始时,我只是CTRL+C回到一个空的命令行提示符。这被认为是不良做法吗?我有时会觉得有一种更好的方法可以脱离某些事物,但是真的不知道。
27 linux  bash 

5
从shell提示接受'Yes'变体的更好方法
我编写的Shell脚本的可用性测试发现,人们对如何回答以“是”为答案的问题抱有不同的期望。请参见下面的代码示例中的变体。 当然,必须有一种更好的方法来解决我的问题?您对此的可读性和简短形式是什么? read -p 'Answer this question with yes: ' answer if [ "$answer" = 'Y' -o "$answer" = 'YES' -o "$answer" = 'Yes' -o "$answer" = 'y' -o "$answer" = 'yes' -o some-alternate-condition ]; then echo 'Surely this can be written better?' fi

3
“ while:;”是什么意思?
我知道什么是while循环。但是,我只看到它适用于: while [condition] while ![condition] while TRUE (infinite loop) 之后的陈述while必须为TRUE或FALSE。 有一个名为shell的内置命令:。它被描述为不执行任何操作的虚拟命令,但是我不知道这里是否相同,即使它可以是TRUE还是FALSE。也许有些不同,但是呢?

2
使用`set -eu`时正确的EXIT和ERR陷阱行为
与ERR和EXIT陷阱一起使用set -e(errexit),set -u(nounset)时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。 1)set -u不触发ERR陷阱 码: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} 预期:ERR陷阱被调用,RC!= 0 实际:未调用ERR陷阱,RC == 1 注意:set -e不改变结果 2)set -eu在EXIT陷阱中使用退出代码是0而不是1 码: #!/bin/bash trap 'echo "EXIT (rc: $?)"' EXIT set -eu echo ${UNSET_VAR} 预期:调用EXIT陷阱,RC == 1 实际:调用EXIT陷阱,RC == 0 注意:使用时set +e,RC ==1。当任何其他命令引发错误时,EXIT陷阱将返回正确的RC。 编辑:关于该主题的一篇SO帖子带有一个有趣的注释,表明这可能与所使用的Bash版本有关。使用Bash 4.3.11测试此代码段会导致RC = …

2
验证变量的长度
我必须验证读取的变量的长度(我的脚本限制为插入的五个字符),我在想这样的事情: #!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi 还有更“优雅”的解决方案吗?
27 bash  shell  string 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.