标签: bash

如何为 - 减号创建别名

我想映射-cd -

我试过逃避它,带和不带单引号/双引号,但它们似乎都不起作用。

alias \-='cd -'alias '-'='cd -' =>
bash: alias: -=: invalid option alias: usage: alias [-p] [name[=value] ... ]

所以问题是 bash 认为我想为别名定义一个选项。(什么是 | 有没有)对此的解决方法?

unix bash alias

6
推荐指数
1
解决办法
1545
查看次数

什么是返回命令提示符丢弃 STDOUT 和 STDERR 的好方法

我经常通过例如从 cli 启动应用程序command &以立即返回提示。这样做的缺点是,我仍然得到 STDOUT 和 STDERR。

所以我command &> /dev/null习惯丢弃这些输出。

当不得不在一天中经常写这篇文章时,这可能会变得很麻烦。

所以我的问题是,在不需要时是否有更好的(阅读更短的)方法来丢弃 STDOUT 和 STDERR?

可以做什么?也许编写一个包装脚本来启动应用程序?这样做的优雅方式是什么?

routing bash redirection command-line

6
推荐指数
1
解决办法
208
查看次数

Bash 脚本中的时区转换

我找到了一个关于如何使用 Linuxdate命令转换时区的解决方案: Timezone conversion by command line

$ date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010
Run Code Online (Sandbox Code Playgroud)

它运行良好,但我无法弄清楚如何在 Bash 脚本中使用它,当时间是一个变量时,例如:

TIME=18:00
DATE="`date --date='TZ="Asia/Taipei" $TIME' +%F\ %H:%M`"
echo $DATE;
Run Code Online (Sandbox Code Playgroud)

我在转义特殊字符时遇到问题。而且我完全不明白为什么该date命令适用于BSTEET等时区,而不适用于“亚洲/台北”、欧洲/莫斯科等时区。

bash time-zone

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

$@ 和 $* 之间 bash 脚本的差异

$@和之间有哪些区别$*?例如,我在这里看不到任何区别:

#! /bin/bash
echo with star: $*
echo with at sign: $@
Run Code Online (Sandbox Code Playgroud)

bash shell command-line-arguments

6
推荐指数
1
解决办法
768
查看次数

Bash:将 ffmpeg 输出保存到变量

如何将 ffmpeg 文件信息输出保存到变量?如果我将以下命令放入变量中,它始终为空,即使该命令生成输出 /usr/bin/ffmpeg/ffmpeg -i $1

我试过的

INFO=$(/usr/bin/ffmpeg/ffmpeg -i $1)

if [ -z "$INFO" ]; then
        echo "empty variable"
else
        echo "$INFO"
fi
Run Code Online (Sandbox Code Playgroud)

bash ffmpeg

6
推荐指数
1
解决办法
3443
查看次数

Bash:如何在 shift 时使用;do..case $1 in

我正在处理一个 bash 脚本,我需要实现“选项”。我怎么能用 bash 做到这一点?

我的目标是按以下方式运行脚本: /myscript.sh -d "/var/log/" -c "test"

我试过的:

while shift; do
        case $1 in
                -d)
                        shift&&DIR="$1"||die
                ;;
                -c)
                        shift&&COMMAND="$1"||die
                ;;
        esac
done

echo "$DIR"
echo "$COMMAND"
Run Code Online (Sandbox Code Playgroud)

bash

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

sudo -E 不传递所有变量

阅读man pages我希望sudo -E将所有环境变量传递给子shell,但我没有得到预期的结果。

正如预期的那样,很棒:

$ export LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
$ env | grep LD
LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
Run Code Online (Sandbox Code Playgroud)

更多精彩:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where
Run Code Online (Sandbox Code Playgroud)

不是预期的:

$ env -i LD_LIBRARY_PATH=$LD_LIBRARY_PATH sudo -E /usr/bin/env | grep LD
$
$ env -i LD_LIBRARY_PATH=/tmp/no/where sudo -E /usr/bin/env | grep LD
$
Run Code Online (Sandbox Code Playgroud)

所以,我怎么能得到sudo -E通过LD_LIBRARY_PATH而无需编辑/etc/sudoers

编辑

根据 如何使 sudo 保留我的环境变量?OP 表明外壳可能与!env_reset. 我正在运行Arch Linux,默认 shell 是BASH. 再次,我不 …

sudo bash environment-variables

6
推荐指数
1
解决办法
2655
查看次数

等待 Virtualbox VM 关闭的 Bash 脚本?

Virtualbox 能够向正在运行的虚拟机发出命令:

vboxmanage controlvm NameOfRunningVM acpipowerbutton
Run Code Online (Sandbox Code Playgroud)

但是,此命令会立即返回,这会导致我的情况无法正常关闭。

情况:我计划在 /etc/init.d 脚本中使用它。这将允许正常关闭所有正在运行的 VM。目前,当我发出vboxmanage controlvm NameOfRunningVM acpipowerbutton命令时,关闭会被切断,因为该命令不会等待 VM 关闭。

我需要一个 Bash 脚本,它将 Virtualbox 机器的名称和超时(以秒为单位)作为输入,然后等待 VM 返回到“关机”状态或超时发生?

我不确定这样做的最佳方法是什么。


我正在考虑使用以下命令检查 VM 的状态:

[user@machine ~]$ vboxmanage list runningvms
"VirtualMachineName" {65c93f1f-4508-4119-b07d-ce9e89b23b8e}
Run Code Online (Sandbox Code Playgroud)

bash 脚本可能会轮询正在运行的虚拟机列表。一旦机器名称停止列出,VM 将被视为已完成。

virtualbox bash virtual-machine init-script sysvinit

6
推荐指数
1
解决办法
9224
查看次数

nohup 输出重定向到不同的文件

nohup经常在linux/下用于重要的长时间运行的进程bash,以至于这nohup time my command with arguments && mv nohup.out my.log对我来说几乎是一个习语。

问题是nohupstdout和 都stderr放入nohup.out,我无法控制文件的名称。这意味着如果我不小心nohup在同一个目录中启动了两个s,它们的输出将在nohup.out.

问题是:

  1. 我该如何处理这个问题?总是nohup在不同的目录中运行s 并编写一个首先检查的 shell 函数,这./nohup.out是我看到的两个糟糕的选项。

  2. 为什么我不知道nohup将输出重定向到哪里?GNU 工具往往有这么多的选择,为什么不nohup呢?

bash nohup

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

GUI 会话的 Ubuntu 环境设置(或与终端相同)

我正在使用 Ubuntu 10.10

当我使用普通GUI桌面登录时,似乎环境与终端不一样。

我在.bashrc. 但是,这不适用于 GUI 会话。

实际问题是这样的:

  • 我在 Ubuntu 桌面上做了​​一个 Eclipse 的快捷方式。当我单击它时,它抱怨找不到 JVM 路径。
  • 但是,从终端启动 Eclipse 是可以的。

我怎么解决这个问题?

bash environment-variables

6
推荐指数
1
解决办法
4633
查看次数