Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

4
当我在shell中执行文件时,会发生什么情况?
所以,我以为我对此有很好的了解,但是只是进行了一次测试(以回应我不同意某人的对话),发现我的理解是有缺陷的... 尽可能详细地说明我在Shell中执行文件时会发生什么情况?我的意思是,如果我键入以下内容:如果./somefile some arguments在外壳中键入内容,然后按return键(somefile并存在于cwd中,并且我具有的读取和执行权限somefile),那么在幕后会发生什么? 我以为答案是: Shell进行syscall exec,将路径传递给somefile 内核检查somefile并查看文件的幻数,以确定它是否是处理器可以处理的格式 如果幻数表示文件是处理器可以执行的格式,则 创建一个新流程(在流程表中有一个条目) somefile被读取/映射到内存。创建一个堆栈,执行跳转到的代码的入口点somefile,并ARGV初始化为参数数组(a char**,["some","arguments"]) 如果幻数是shebang,则exec()如上所述产生一个新进程,但是使用的可执行文件是shebang引用的解释器(例如/bin/bash或/bin/perl),somefile并传递给STDIN 如果文件没有有效的幻数,则发生类似“无效文件(不良幻数):执行格式错误”的错误 但是有人告诉我,如果文件是纯文本,那么Shell会尝试执行命令(就像我键入一样bash somefile)。我不相信这一点,但我只是尝试了一下,这是正确的。因此,我显然对这里实际发生的事情有一些误解,并且想了解其机制。 当我在shell中执行文件时,会发生什么情况?(尽可能多的细节是合理的...)
32 shell  kernel  exec  shebang 



1
引号内的通配符
这将是一个简单的过程,但是在我的记忆中,当执行Shell脚本时,使用双引号将允许扩展globlob和变量。 但是在下面的代码中: #!/bin/sh echo *.sh echo "*.sh" echo '*.sh' echo $LANG echo "$LANG" echo '$LANG' 我得到这个结果: bob.sh redeployJboss.sh *.sh *.sh en_US.utf8 en_US.utf8 $LANG 因此,单引号可防止glob和变量扩展,而双引号仅允许变量扩展而没有glob? 我可以使用任何报价模式吗?

6
计算上一个程序的输出行数
我正在尝试计算某个程序产生的输出行数。问题是,该程序需要很长时间才能运行,并且我想向用户显示输出。有没有一种方法可以计算最后一条命令输出的行数? 我可以,program | wc -l但是不会向用户显示输出。据我所知,我必须做program; program | wc -l-但是该程序至少需要一分钟才能运行,所以我不想只为了在底部显示行数就要做一次以上。 编辑: 有没有一种方法可以显示输出(逐行显示),然后在末尾返回计数?


2
“ <<(...)”重定向是什么意思?
我已经看到使用以下命令安装了rvm(红宝石版本管理器): bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) 因此,据我了解,我们获得了脚本内容并将其传递给bash(我相信&lt; &lt;并且&lt;&lt;是同一回事?),我对该&lt; &lt;部分感兴趣,可以在网上找到以下说明: &lt;&lt; 令牌意味着将当前输入流用作程序的STDIN,直到看到令牌为止。 这对我来说还不清楚,有人可以用更简单的方式举例或说明吗?

3
可以将bash脚本挂接到文件吗?
我希望脚本进入睡眠状态,除非修改/删除了某个文件(或在某个目录中创建的文件,或者...)。能否以某种优雅的方式实现?我想到的最简单的事情是一个循环,它会休眠一段时间,然后再次检查状态,但是也许有一种更优雅的方法?
32 linux  shell  files  hook 

4
保存完整的GNU屏幕会话状态
是否可以保留GNU屏幕窗口(或只是标准外壳程序)的“状态”,以便在重新启动后重新加载所有内容: 开壳数 每个外壳的名称 每个shell的当前目录 每个壳的历史 如果可能,其环境变量
32 shell  gnu-screen 

5
如何知道我所处的炮弹的“高度”?
如果我打开一个终端,xterm我将拥有一个外壳。然后,如果我使用ssh或zsh我将有另一个“级别”的外壳程序。有没有办法知道我必须退出Ctrl+D或键入多少次exit才能退出所有这些?我的真正意图是退出除“ root”外壳程序之外的所有内容。 知道终端多路复用器(如screen)对解决方案有什么影响也将是一件很高兴的事情。 PS:请随时更改标题,我不知道这些术语是否正确。
32 shell  terminal 

12
在cron中使用notify-send
我正在将Arch Linux与KDE / Awesome WM一起使用。我正在努力 notify-send与cron。 我试过设置DISPLAY/ XAUTHORITY变量,并notify-send使用“ sudo -u” 运行,但都没有结果。 我可以从会话中以交互方式调用通知发送并获得通知。 FWIW,cron作业运行良好,我通过将内容回显到临时文件来进行验证。只是“通知发送”无效。 码: [matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" &gt;/tmp/crontest sudo -u matrix /usr/bin/notify-send "hello" echo "now tested notify-send" &gt;&gt;/tmp/crontest [matrix@morpheus ~]$ cat …

2
外壳处于“ vi”模式或“ emacs”模式意味着什么?
这个问题直接来自答案。在这种情况下,我特别无法理解以下内容: 在这方面,它的行为比bash(readline)/ ksh / zsh emacs模式更接近emacs,但与终端驱动程序嵌入式行编辑器(在规范模式下)不同,后者在其中Ctrl-W删除了前一个单词(werase,也在vi中) )。 在这里,我们谈论的是shell,而不是两个完全不同的程序的编辑器。说shell处于某种编辑器模式意味着什么? PS:您可以在我了解shell是什么以及如何使用vim进行基本编辑的前提下得出答案。

2
有unix命令行工具可以分析字体文件吗?
给定一个字体文件目录(TTF和OTF),我想检查每种字体并确定它是什么样式(常规,斜体,粗体,粗体斜体)。是否有针对UNIX风格的操作系统的命令行工具可以做到这一点?还是有人知道如何从TTF或OTF字体文件中提取元数据?

2
如何区分文件并从命令输出?
通常您会写: diff file1 file2 但是我想比较一个文件并从命令中输出(这里我使命令变得微不足道): diff file1 &lt;(cat file2 | sort) 好的,当我在shell提示符下手动输入此命令时,此工作有效,但是当我在shell脚本中放入完全相同的行,然后运行该脚本时,出现错误。 因此,问题是-如何正确执行此操作? 当然,我想避免将输出写入临时文件。

5
列出外壳程序知道的所有命令
我可以在bash将列出所有可识别命令的外壳程序(恰好是)上键入什么? 另外,这在外壳方面是否有所不同?还是所有的shell都只有它们识别的命令的“目录”? 其次,另一个问题,但是我该如何覆盖那些问题呢?换句话说,我该如何编写自己的view命令来替换Ubuntu系统上现有的命令,该命令似乎只是在加载vim。
32 shell  command 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.