标签: shell

如何从大型 tar.gz 存档中提取单个文件夹?

我在5GB存档上使用此命令

tar -zxvf archive.tar.gz /folder/in/archive
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?似乎永远没有命令行输出......

shell tar gzip

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

使用不等于运算符进行字符串比较

我试图检查PHONE_TYPE变量是否包含三个有效值之一。

if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
   [ "$PHONE_TYPE" != "CISCO" ]
then
    echo "Phone type must be nortel,cisco or nec"
    exit
fi
Run Code Online (Sandbox Code Playgroud)

上面的代码对我不起作用,所以我尝试了这个:

if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
   [ "$PHONE_TYPE" == "CISCO" ]
then
    :        # do nothing
else
    echo "Phone type must be nortel,cisco or nec"
    exit
fi
Run Code Online (Sandbox Code Playgroud)

这种类型的任务有更干净的方法吗?

shell shell-script

165
推荐指数
4
解决办法
58万
查看次数

如何在 Debian 中从 shell 添加存储库?

在 Ubuntu 中,可以通过以下命令添加存储库 -

sudo add-apt-repository ppa:yannubuntu/boot-repair
Run Code Online (Sandbox Code Playgroud)

由于 Ubuntu 是基于 Debian 代码库的,我原以为它也能在 Debian 中运行,但事实并非如此。

  • 这是什么原因?
  • 我可以使用其他一些 shell 命令来实现相同的目标吗?

注意:我知道我可以编辑/etc/apt/sources.list,但我想从 shell 实现这一点。我还想知道为什么当代码库相同时相同的命令不起作用。

shell debian apt repository ppa

150
推荐指数
4
解决办法
42万
查看次数

仅列出当前目录中的常规文件(但不列出目录)

我可以ls -ld */用来列出当前目录中的所有目录条目。有没有类似的简单方法来列出当前目录中的所有常规文件?我知道我可以使用 find

find . -maxdepth 1 -type f
Run Code Online (Sandbox Code Playgroud)

或统计

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-
Run Code Online (Sandbox Code Playgroud)

但这些并没有让我觉得过于优雅。有没有一个很好的简短方法来只列出常规文件(我不关心设备、管道等)而不是当前目录的子目录?列出符号链接也是一个加分项,但不是必需的。

ls shell wildcards files

150
推荐指数
5
解决办法
36万
查看次数

什么时候需要双引号?

过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。

但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash

% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …

shell bash zsh shell-script quoting

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

shell 脚本行末尾的&符号是什么意思?

sh sys-snap.sh &
Run Code Online (Sandbox Code Playgroud)

什么是sh?什么是sys-snap.sh?为什么我应该放在&行尾?谁能解释一下语法?

如果没有&脚本,在我按下Ctrl+之前,脚本不会返回到提示C。随着&我可以按回车,它的工作原理。

shell

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

如何在命令行中取消设置变量?

我尝试了以下命令来设置代理yaourt

export ALL_PROXY=http://proxy.example.com:8080
Run Code Online (Sandbox Code Playgroud)

问题是如何取消设置代理yaourt?通常,如何取消设置当前 shell 中变量的值?

shell yaourt

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

如何使用现有环境变量运行 cron 命令?

如何使用现有环境变量运行 cron 命令?

如果我在 shell 提示符下,我可以输入echo $ORACLE_HOME并获取路径。这是在我的~/.profile. 但是,似乎~/.profile没有从 cron 脚本加载,因此我的脚本失败,因为$ORACLE_HOME未设置变量。

这个问题中,作者提到创建一个~/.cronfile配置文件,为 cron 设置变量,然后他做了一个解决方法,将他的所有 cron 命令加载到他保存在他~/Cron目录中的脚本中。像~/.cronfile这样的文件听起来是个好主意,但其余的答案似乎有点麻烦,我希望有人能告诉我一种更简单的方法来获得相同的结果。

我想在我的脚本开始时我可以添加类似的东西,source ~/.profile但这似乎是多余的。

那么我怎样才能让我的 cron 脚本从我的交互式 shell 配置文件中加载变量呢?

shell cron environment-variables

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

如何在远程机器上执行本地脚本并包含参数?

我编写了一个在本地执行时运行良好的脚本:

./sysMole -time Aug 18 18
Run Code Online (Sandbox Code Playgroud)

参数"-time""Aug""18""18"成功传递给脚本。

现在,这个脚本被设计为在远程机器上执行,但是从本地机器上的本地目录执行。例子:

ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole
Run Code Online (Sandbox Code Playgroud)

这也很好用。但是当我尝试包含上述参数(-time Aug 18 18) 时,问题就出现了,例如:

ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole -time Aug 18 18
Run Code Online (Sandbox Code Playgroud)

运行该脚本后,我收到以下错误:

bash: cannot set terminal process group (-1): Invalid argument
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)

请告诉我我做错了什么,这非常令人沮丧。

shell scripting bash options shell-script

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

*sh shell 中的反引号(即`cmd`)是否已被弃用?

我在 Unix 和 Linux 以及其他使用短语“反引号已被弃用”的站点上多次看到此评论,这与 Bash 和 Zsh 等 shell 相关。

这个说法是真的还是假的?

shell scripting bash zsh shell-script

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