Bash 这个面试项目会建议什么样的专业水平?(一)福安;;回音条|读foo;回声$foo

Bash 这个面试项目会建议什么样的专业水平?(一)福安;;回音条|读foo;回声$foo,bash,ksh,zsh,sh,Bash,Ksh,Zsh,Sh,假设您正在准备一次深入的技术面试,并被要求对您在shell脚本方面的专业技能进行评分(假设评分为1到10)。然后看下面的shell命令行示例并回答以下问题:这是做什么的?为什么 对于一般情况(而不仅仅是一个或另一个特定的shell版本),您需要多大的专业知识才能正确回答这个问题 现在假设您得到了以下示例: cat "$SOMELIST_OF_HOSTS" | while read host; do ssh $host "$some_cmd"; done 。。。采访者解释说,这个命令“不起作用”

假设您正在准备一次深入的技术面试,并被要求对您在shell脚本方面的专业技能进行评分(假设评分为1到10)。然后看下面的shell命令行示例并回答以下问题:这是做什么的?为什么

对于一般情况(而不仅仅是一个或另一个特定的shell版本),您需要多大的专业知识才能正确回答这个问题

现在假设您得到了以下示例:

cat "$SOMELIST_OF_HOSTS" | while read host; do ssh $host "$some_cmd"; done
。。。采访者解释说,这个命令“不起作用”,而且它似乎只在(大)文件中列出的几个主机上执行ssh命令(每几百个主机名中就有一个主机名,似乎分散在列表中)。他或她自然会问:它为什么这样做?那你怎么解决呢

然后对能够正确回答这些问题的人的专业水平进行评分。

第一个是中级新手(见下文)<代码>取消设置,
回音
读取
和基本变量使用应该在Bash的前1000行中遇到,使用典型的shell代码

二是中级IMO;在我发现像
ssh
gobbling标准输入这样的无害命令之前,我已经使用Bash好几年了。特别是对于
ssh
命令,这是一个很好的测试,但是由于它有点异常,因此最好使用
cat
进行测试,以查看候选对象是否理解问题的基础

但正如我认为@IgnacioVazquez Abrams所指出的,你不能仅仅根据两个狭隘的问题来给他们打分——比如,为什么不给他们一个实际的问题来解决呢?你会对他们实际完成工作的能力有一个更好的了解


编辑:正如@IgnacioVazquez Abrams也指出的,这些基本上是测试同样的东西。所以我会给这两个中间值打分。

注意,第一个示例依赖于shell。管道是一个IPC(进程间通信)操作员,shell可以通过在管道的任一侧创建子shell来实现这一点。(从技术上讲,我认为一些壳牌公司甚至可以在单独的子流程中对双方进行评估)

read
命令是一个内置命令(必须是这样)。因此,在诸如
bash
和经典Bourne shell派生的shell中,supprocess(subshell)位于管道的右侧(从当前shell读取),并且该进程在其
读取后结束(在本例中为分号)。Korn shell(至少可以追溯到'93年)和
zsh
将其子shell放在管道的另一端,并正在将这些子shell中的数据读取到当前流程中

这就是面试问题的重点

我在这里的问题是寻找一些共识或指标来评价这个级别的问题。这不是一个琐事,因为它确实会影响现实世界的脚本和shell脚本的可移植性,并且它依赖于对底层UNIX和shell语义(IPC、管道和子进程/子shell)的基本理解

第二个例子类似,但更微妙。我将指出以下更改“有效”(文件中的每个主机上都将执行
ssh
):

cat$SOME|u FILE|读取主机时;执行ssh“$host”“$some_cmd”
这里的问题是
ssh
命令缓冲了输入,即使远程设备上的命令从未从其stdin读取数据。由于shell/subshell(从管道读取)和
ssh
共享相同的输入流,因此
ssh
正在“窃取”管道中的大部分输入,只为
read
命令留下偶尔的一行

这不是一个人为的问题。事实上,我在工作中遇到了这个问题,我不得不想办法解决。我从经验中知道,理解第二个例子至少比第一个例子高一两个档次。我也知道,从多年的经验来看,我面试过的应聘者(系统管理员和编程职位)中只有不到10%的人能马上回答第一个问题)


我从未在现场采访中使用过第二个问题,我一直不愿意这样做。

新手。。。也许是4。。。如果他们不能很快地识别和回答这两个问题,就不会考虑雇佣某人。第二个只会在第一个主机上工作。但是你错过了第一个原因。啊,好吧,就我的水平而言,就这么多:)你们花了多少时间才发现ssh在吃输入?如果超过几分钟,这可能是一个糟糕的问题,因为你知道一个还没有见过它的应聘者必须比你更好地在面试环境中摸索出答案。当然,除非他们是通过我或其他人的类似帖子了解到这一点的。:)顺便说一句,我通常更关心应聘者在回答问题时的工作方式,以及他们如何讨论各种可能性,然后我会考虑他们是否正确回答了问题。如果他们能马上说出正确的答案,那么我对他们了解得很少。如果他们经过一个考虑假设并消除它们的过程(可能是通过提出澄清问题或提出可能的答案),那么我所学到的知识就具有更大的预测价值。我关心的是他们将如何处理更棘手的问题和未知问题,而不是他们是否知道这些琐事。
cat "$SOMELIST_OF_HOSTS" | while read host; do ssh $host "$some_cmd"; done
cat $SOME_FILE | while read host; do ssh "$host" "$some_cmd" < /dev/null; done