标签: bash

如何知道 /dev/sdX 是连接的 USB 还是 HDD?

我如何知道是本地 HDD 还是 USB 密钥?我更喜欢一种没有root权限的方法。/dev/sdX

好的,udevadm帮了大忙:

对于本地硬盘:

udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
Run Code Online (Sandbox Code Playgroud)

对于 USB 密钥:

udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
Run Code Online (Sandbox Code Playgroud)

bash administration hardware hard-disk

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

在 BASH 历史记录中只保留成功的命令

有时我会误解命令的语法:

# mysql -d test
mysql: unknown option '-d'
# echo $?
2
Run Code Online (Sandbox Code Playgroud)

我再试一次,结果正确:

# mysql --database test
Welcome to the MySQL monitor.
mysql >
...
Run Code Online (Sandbox Code Playgroud)

如何防止第一个错误代码不为 0 的命令进入历史记录?

bash command-history

24
推荐指数
3
解决办法
4590
查看次数

在 bash 中,如何回显变量名,而不是变量值?

假设我var在 bash 中有一个变量。我可以给它赋值。例如,我将其设为字符串:

var="Test"
Run Code Online (Sandbox Code Playgroud)

我想要的是echo的名称var,而不是var. (我可以用 做后者echo $var,但我实际上想做前者。)

SO 对这个问题的回答说要使用echo ${!var},但是当我这样做时,我 echo 只返回一个空行。例如,这个 bash 脚本

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
Run Code Online (Sandbox Code Playgroud)

返回此输出:

Hi

Bye
Run Code Online (Sandbox Code Playgroud)

HiBye之间只有一个空行,而不是var。我究竟做错了什么?

我在Ubuntu 10.04.4上运行bash 4.1.5(1)

bash

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

将变量作为字符串或整数进行比较时是否有任何重大区别

出于好奇,在进行 bash 变量比较(其值为 an integer)时,可以针对某些声明为 anint或 as 的预定义值对其进行测试string

示例脚本

#!/bin/bash
f1()
{
        [ "$1" == "1" ] && echo "$FUNCNAME: \"1\" compared as string"
}

f2()
{
        [[ "$1" -eq 1 ]] && echo "$FUNCNAME: \"1\" compared as int"
}

f1 $1
f2 $1
Run Code Online (Sandbox Code Playgroud)

输出

$  ./param.sh 1
f1: "1" compared as string
f2: "1" compared as int
Run Code Online (Sandbox Code Playgroud)

$  ./param.sh blah
$
Run Code Online (Sandbox Code Playgroud)

这两个函数的行为方式相同,所以我想知道检查整数变量时是否有首选方法?我会去检查intvsint因为它更严格,但我想知道这样做是否有任何缺点string

在这种情况下,f2()对比较也更加严格,即传递一个十进制值会破坏它,而不 …

shell bash test

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

为什么“echo --help”没有给我回声的帮助页面?

我在 Bash 中尝试了 'man echo',它告诉我 'echo --help' 将显示帮助然后退出,同样,'echo --version' 将输出版本并退出。但为什么它不起作用?'echo --help' 只是简单地按字面打印 '--help'。

shell bash echo

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

是否在任何地方为 bash 定义了终端颜色转义序列?

我在 Bash 脚本中经常使用颜色(主要在 CentOS 上),但为了使它们的使用更方便,我最终变量重新定义为颜色值:

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"
Run Code Online (Sandbox Code Playgroud)

或者也有tput

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`
Run Code Online (Sandbox Code Playgroud)

我已经搜索了/etc/rc.d/init.d目录,但没有找到任何与颜色定义相关的内容。

是否已经有了这样的定义?如果不是,我会将它们放入一个文件中/etc/rc.d/init.d,并将其包含在我的脚本中,有点像/etc/rc.d/init.d/functions

colors bash terminal

24
推荐指数
1
解决办法
3336
查看次数

在 bash shell 脚本中运行和获取源之间的区别?

要么我在这里问的是非常非正统的/非常规的/冒险的,要么我的 Google-fu 技能不符合要求...

bashshell 脚本中,是否有任何简单的方法可以判断它是由另一个 shell 脚本获取的,还是由它自己运行的?换句话说,是否可以区分以下两种行为?

# from another shell script
source myScript.sh

# from command prompt, or another shell script
./myScript.sh
Run Code Online (Sandbox Code Playgroud)

我正在考虑做的是创建一个类似于实用程序的 shell 脚本,其中包含bash可以在获取时可用的函数。但是,当这个脚本自己运行时,我也喜欢它根据定义的函数执行某些操作。这个shell脚本是否有某种环境变量可以选择,例如

some_function() {
    # ...
}
if [ -z "$IS_SOURCED" ]; then
    some_function;
fi
Run Code Online (Sandbox Code Playgroud)

最好,我正在寻找一种不需要调用者脚本设置任何标志变量的解决方案。

编辑:我知道采购和运行脚本之间的区别,我想在这里找出是否可以分辨正在使用的脚本的区别(两种方式)。

bash shell-script

24
推荐指数
3
解决办法
6292
查看次数

有时历史命令不存储在 .bash_history 中

我昨天在我的 CentOS 7 上发出了很多命令。但是今天我想检索这些命令时,我发现没有任何记录。当我打开文件时.bash_history,我仍然找不到我昨天发出的命令,但我发现了许多前几天的旧命令。为什么没有存储最近的命令?如何提高历史记录能力?

bash command-history

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

在 Bash 中输入单个感叹号有什么作用?

Bash 使用感叹号进行历史扩展,如该问题的答案中所述(例如,使用sudo !!运行先前的命令行sudo)。但是,我找不到任何解释运行以下命令(即单个感叹号)的作用的地方:

!
Run Code Online (Sandbox Code Playgroud)

它似乎不打印任何内容并以 1 退出,但我不确定为什么会这样。我已经在网上和 Bash 手册页中查看过,但除了它是一个“保留字”这一事实之外,找不到任何东西——但也是如此},并运行这个:

}
Run Code Online (Sandbox Code Playgroud)

打印错误:

bash: syntax error near unexpected token `}'
Run Code Online (Sandbox Code Playgroud)

bash history-expansion exit-status

24
推荐指数
2
解决办法
6423
查看次数

我可以在终端中忽略前导感叹号吗?(由于 ipython,我本能地输入它们)

因为我大部分时间都在 IPython shell 中度过,所以我有一个坏习惯,即在终端命令前加上感叹号。通常,这只会导致错误,但有时,它会导致一些不好的事情发生。我可以有效地禁用!终端中的功能吗?这是否有干扰任何脚本的风险?

command-line bash

24
推荐指数
3
解决办法
3061
查看次数