Questions tagged «shell»

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


3
`<&-`是做什么的?
我将Bash的一个片段复制到远程执行的ssh命令的后台: ssh user@remote &lt;&lt;CMD some process &lt;&amp;- &gt;log 2&gt;error &amp; CMD 怎么&lt;&amp;-办? 我的猜测是,它与&lt; /dev/null 我的下一个理解是,三个主要的文件描述符(stdin,stdout,stderr)需要被关闭,以防止: 作业正在后台运行,脚本正在退出-发生冲突吗? 当终端关闭时,正在接受来自终端的stdin的所有进程都关闭了吗?


9
是否有类似lorem ipsum生成器的东西?
是否有类似“ lorem ipsum generator”的东西?我知道它存在于Latex中,甚至存在于LibreOffice中,但是我正在寻找终端命令。我想输入类似的内容loremipsum 10 &gt;&gt; file1.txt,以便给我lorem ipsum的前10个段落,每个段落的末尾都有一个LF字符,并且在每个参数之间有一条空白线。输出将被重定向到当前目录中名为file1.txt的文件。
20 shell  terminal  text 


6
Unix shell“ stdin / stdout API”的稳定性如何?
grepping,awking,sedding和管道是任何类Unix操作系统的用户的日常例行程序,可能是在命令行中还是在shell脚本中(从现在起统称为过滤器)。 从本质上讲,当使用“标准” Unix CLI程序和Shell内置程序(从现在起统称为命令)时,过滤器需要在每个过滤器步骤中为stdin,stdout和stderr提供精确的预期格式,以使其正常工作。在下文中,我将某些命令的这种精确的预期格式称为该命令的API。 作为具有Web开发背景的人,我将这种数据收集和数据处理技术与Web抓取进行了比较 -这种技术在数据呈现方式发生最小变化时就非常不稳定。 我的问题现在与Unix命令API的稳定性有关。 类似Unix的操作系统中的命令是否在输入和输出方面遵循正式的标准? 历史上是否存在某些实例,其中一些重要命令的更新导致使用该命令的较早版本构建的某些过滤器的功能中断? Unix命令是否已经随着时间而成熟,以至于绝对不可能以某种过滤器可能损坏的方式进行更改? 如果由于更改命令API导致过滤器不时损坏的情况,作为开发人员,我如何保护我的过滤器免受此问题的影响?


4
使用特殊字符批量重命名(或正确显示)文件
我有一堆目录和子目录,其中包含带有特殊字符的文件,例如以下文件: robbie@phil:~$ ls test�sktest.txt test?sktest.txt 查找揭示了一个转义序列: robbie@phil:~$ find test�sktest.txt -ls 424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt 我什至可以在控制台上键入其名称的唯一原因是由于制表符的完成。这也意味着我可以手动重命名它们(并去除特殊字符)。 我已将LC_ALL设置为UTF-8,这似乎无济于事(也不在新的shell上): robbie@phil:~$ echo $LC_ALL en_US.UTF-8 我正在使用Mac上的ssh连接到计算机。这是Ubuntu安装: robbie@phil:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=7.10 DISTRIB_CODENAME=gutsy DISTRIB_DESCRIPTION="Ubuntu 7.10" Shell是Bash,TERM设置为xterm-color。 这些文件已经存在了很长一段时间,并且尚未使用该Ubuntu版本创建。因此,我不知道以前的系统编码设置是什么。 我已经尝试过以下方法: find . -type f -ls | sed 's/[^a-zA-Z0-9]//g' 但是我找不到能满足我所有需求的解决方案: 识别所有具有不可显示字符的文件(以上内容忽略太多) 对于目录树中的所有那些文件(递归),请执行mv …

3
设置“ noclobber”有什么缺点吗?
鉴于zsh此命令可以破坏所有文件: &gt;* 我认为设置该选项noclobber将是一个好主意。 &gt;| file如果我想同时在bash和zsh中使用默认的clobber行为,则可以始终使用。(zsh还允许使用其他语法&gt;!file)。 我猜测noclobber由于POSIX兼容性,默认情况下未设置,但请确保: 设置是否有缺点noclobber? 无论如何,是否noclobber只为交互式外壳设置?
20 bash  shell  zsh 


4
路径独立shebangs
我有一个脚本,希望能够在两台计算机上运行。这两台机器从相同的git存储库中获取脚本的副本。该脚本需要使用正确的解释器(例如zsh)运行。 不幸的是,这两个 env和zsh住在本地和远程计算机不同的位置: 遥控机器 $ which env /bin/env $ which zsh /some/long/path/to/the/right/zsh 本地机器 $ which env /usr/bin/env $which zsh /usr/local/bin/zsh 如何设置shebang,以便像/path/to/script.sh往常一样运行脚本中的Zsh可用脚本PATH?
20 shell  zsh  cron  path 

3
在不同的shell中使用“ echo -e”转义序列
我只是注意到,Linux上的Shell中-e似乎不存在该echo命令的标志。这是一个混乱的设置还是“正常”的? 以一些代码为例: #!/bin/sh echo -e "\e[3;12r\e[3H" 印刷品: -e \e[3;12r\e[3H 这以前工作!我猜有些stty命令非常错误,现在不再起作用。有人建议我sh实际上是正义的bash。

2
以空合并方式设置shell变量
我真的很喜欢“空合并”,您可以在其中将变量设置为事物列表中的第一个“非空”值。许多语言都支持此功能,例如: C#: String myStr = string1 ?? string2 ?? "default"; JavaScript: var myStr = string1 || string2 || "default"; ...等等。我只是好奇是否可以在Bash中设置变量? 伪: MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
20 bash  shell  variable 

3
将多个文件的内容馈送到脚本的stdin的简写
假设我有一个名为的脚本script,该脚本读取stdin一些结果并将其吐出到屏幕上。 如果要向其提供一个文件的内容,请输入: $ ./script &lt; file1.txt 但是,如果我想将多个文件的内容以相同的方式提供给脚本,那有可能吗?到目前为止,我想到的最好的方法是: cat file1.txt file2.txt &gt; combined.txt &amp;&amp; ./script &lt; combined.txt 它使用两个命令并创建一个临时文件。有没有办法做同样的事情,但绕开创建合并文件?

3
比较整数:算术表达式或条件表达式
在Bash中,可以使用条件表达式比较两个整数 arg1 OP arg2 OP是一个-eq,-ne,-lt,-le,-gt,或-ge。如果arg1分别等于,不等于,小于,等于或大于arg2,则这些算术二进制运算符返回true 。Arg1和arg2可以是正整数或负整数。 或算术表达式: &lt;= &gt;= &lt; &gt; 比较 == != 平等与不平等 为什么我们有两种不同的方法来比较两个整数?什么时候使用? 例如,[[ 3 -lt 2 ]]使用条件表达式,并(( 3 &lt; 2 ))使用算术表达式。当比较为真时,两者都返回0 比较两个整数时,这两种方法是否可以始终互换使用?如果是,为什么Bash有两种方法而不是一种?

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.