我在5GB存档上使用此命令
tar -zxvf archive.tar.gz /folder/in/archive
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?似乎永远没有命令行输出......
我试图检查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)
这种类型的任务有更干净的方法吗?
在 Ubuntu 中,可以通过以下命令添加存储库 -
sudo add-apt-repository ppa:yannubuntu/boot-repair
Run Code Online (Sandbox Code Playgroud)
由于 Ubuntu 是基于 Debian 代码库的,我原以为它也能在 Debian 中运行,但事实并非如此。
注意:我知道我可以编辑/etc/apt/sources.list,但我想从 shell 实现这一点。我还想知道为什么当代码库相同时相同的命令不起作用。
我可以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)
但这些并没有让我觉得过于优雅。有没有一个很好的简短方法来只列出常规文件(我不关心设备、管道等)而不是当前目录的子目录?列出符号链接也是一个加分项,但不是必需的。
过去的旧建议是对任何涉及 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可以省略 内部的双引号[[ ... ]],但不能省略内部 …
sh sys-snap.sh &
Run Code Online (Sandbox Code Playgroud)
什么是sh?什么是sys-snap.sh?为什么我应该放在&行尾?谁能解释一下语法?
如果没有&脚本,在我按下Ctrl+之前,脚本不会返回到提示C。随着&我可以按回车,它的工作原理。
我尝试了以下命令来设置代理yaourt:
export ALL_PROXY=http://proxy.example.com:8080
Run Code Online (Sandbox Code Playgroud)
问题是如何取消设置代理yaourt?通常,如何取消设置当前 shell 中变量的值?
如何使用现有环境变量运行 cron 命令?
如果我在 shell 提示符下,我可以输入echo $ORACLE_HOME并获取路径。这是在我的~/.profile. 但是,似乎~/.profile没有从 cron 脚本加载,因此我的脚本失败,因为$ORACLE_HOME未设置变量。
在这个问题中,作者提到创建一个~/.cronfile配置文件,为 cron 设置变量,然后他做了一个解决方法,将他的所有 cron 命令加载到他保存在他~/Cron目录中的脚本中。像~/.cronfile这样的文件听起来是个好主意,但其余的答案似乎有点麻烦,我希望有人能告诉我一种更简单的方法来获得相同的结果。
我想在我的脚本开始时我可以添加类似的东西,source ~/.profile但这似乎是多余的。
那么我怎样才能让我的 cron 脚本从我的交互式 shell 配置文件中加载变量呢?
我编写了一个在本地执行时运行良好的脚本:
./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)
请告诉我我做错了什么,这非常令人沮丧。
我在 Unix 和 Linux 以及其他使用短语“反引号已被弃用”的站点上多次看到此评论,这与 Bash 和 Zsh 等 shell 相关。
这个说法是真的还是假的?