我--
在compgen
命令中看到使用过。
例如:
compgen -W "foo bar baz" -- b
Run Code Online (Sandbox Code Playgroud)
里面的意思是什么--
?
在我的~/.bashrc
文件中有两个定义:
commandA
,这是更长路径的别名commandB
,这是 Bash 脚本的别名我想用这两个命令处理同一个文件,所以我写了以下 Bash 脚本:
#!/bin/bash
for file in "$@"
do
commandA $file
commandB $file
done
Run Code Online (Sandbox Code Playgroud)
即使在退出会话并重新登录后,command not found
当我运行此脚本时,Bash 仍会提示我输入两个命令的错误。
我究竟做错了什么?
我试图检查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)
这种类型的任务有更干净的方法吗?
我是盲人还是没有类似的--in-place
选择sort
?
为了将结果保存到输入文件,sed 使用-i
( --in-place
)。
将输出重定向sort
到输入文件
sort < f > f
Run Code Online (Sandbox Code Playgroud)
导致它为空。如果没有--in-place
选择 - 也许有一些技巧可以方便地做到这一点?
(我唯一想到的是:
sort < f > /tmp/f$$ ; cat /tmp/f$$ > f ; rm /tmp/f$$
Run Code Online (Sandbox Code Playgroud)
移动不是正确的选择,因为可能会更改文件权限。这就是为什么我用临时文件的内容覆盖,然后将其删除。)
我有以下 bash 脚本:
#!/bin/bash
upperlim=10
for i in {0..10}
do
echo $i
done
for i in {0..$upperlim}
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
第一for
回路(没有变量upperlim
中的循环控制)工作正常,但所述第二for
环路(与可变upperlim
的循环控制)没有。有什么办法可以修改第二个for
循环以使其正常工作吗?谢谢你的时间。
我应该访问服务器,以便将公司的临时服务器和实时服务器链接到我们的部署循环中。他们这边的管理员设置了两个实例,然后在服务器上创建了一个用户,供我们通过 SSH 登录。我已经习惯了这么多。
在我看来,现在会发生的是我将我的公钥发送给他们,该公钥可以放在他们的授权密钥文件夹中。然而,他们通过电子邮件向我发送了一个文件名id_rsa
,该文件名包含-----BEGIN RSA PRIVATE KEY-----
在文件中。这是正常的吗?
我环顾四周,可以找到大量关于从头开始生成和设置我自己的密钥的资源,但没有从服务器的私钥开始。我应该使用它为自己生成一些密钥还是?
我会直接问系统管理员,但不想显得白痴,浪费我们中间的每个人的时间。我是否应该忽略他发给我的密钥并要求他们将我的公钥放在他们的授权文件夹中?
我有一个脚本,当我想要它时它不会退出。
具有相同错误的示例脚本是:
#!/bin/bash
function bla() {
return 1
}
bla || ( echo '1' ; exit 1 )
echo '2'
Run Code Online (Sandbox Code Playgroud)
我假设会看到输出:
:~$ ./test.sh
1
:~$
Run Code Online (Sandbox Code Playgroud)
但我实际上看到:
:~$ ./test.sh
1
2
:~$
Run Code Online (Sandbox Code Playgroud)
()
命令链是否以某种方式创建了一个范围?exit
如果不是脚本,退出是什么?
有时候,我看到shell脚本使用所有的引用一些文字,这些不同的方式:"..."
,'...'
,$'...'
,和$"..."
。为什么有这么多不同类型的引用被使用?
他们的行为是否有所不同或影响了我在他们内部可以做的事情?
主流 *NIX shell 之间的根本区别是什么,哪些场景可能会促使您使用一种而不是另一种?我知道其中一些可能归结为用户偏好,但我只使用过 Bash,我很想知道另一个 shell 可能有用的地方。
此外,在一个或另一个 shell 下运行时是否对用户编写的 shell 脚本有影响,或者仅仅是更改文件顶部的 shell 的问题?我的直觉说这并不容易。
我已经破解了很多 shell 脚本,有时最简单的事情让我感到困惑。今天我遇到了一个广泛使用:
(冒号)bash 内置的脚本。
该文档似乎很简单:
Run Code Online (Sandbox Code Playgroud): (a colon) : [arguments]
除了扩展参数和执行重定向之外,什么都不做。返回状态为零。
但是,我以前只在 shell 扩展的演示中看到过这个。我遇到的脚本中的用例广泛使用了这种结构:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Run Code Online (Sandbox Code Playgroud)
实际上有数百个 grep,但它们只是更多相同。除了上面的简单结构之外,不存在输入/输出重定向。稍后在脚本中不会检查返回值。
我正在阅读这是一个无用的结构,上面写着“或什么都不做”。用“或什么都不做”来结束这些 grep 的目的是什么?在什么情况下,这个构造会导致与简单地|| :
从所有实例中删除不同的结果?