Questions tagged «shell»

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


3
外壳扩展(A | B)的文件名?
or例如,当读取文件时,是否可以在shell中扩展选择范围。 我的意思是,例如,它grep支持类似于(A|B)文件中的A或B的语法。 同样,如果我有这些文件: file1.txt file2.txt file3.txt file4.txt file5.txt 我能做到cat file{1..5}.txt的bash,因为它扩大了范围。是否有等效的方法仅对几个文件执行此操作? 例如cat file(1|5).txt,仅打印那些2?

1
在STDERR之前显示STDOUT?
我是bash的新手,我一生都./fff无法解决如何在stderr之前运行某个命令,假设并打印常规stdouts(我对自己的含义感到困惑) 例如 $ printf "I am a\ndrill\n" > fff; $ cat fff nofile fff nofile fff I am a drill cat: nofile: No such file or directory I am a drill cat: nofile: No such file or directory I am a drill 需要打印如下: I am a drill I am a …

4
在/ bin / sh中的冒号上分割字符串
我的dash脚本采用形式的参数hostname:port,即: myhost:1234 而port是可选的,即: myhost 我需要将主机和端口读入单独的变量。在第一种情况下,我可以这样做: HOST=${1%%:*} PORT=${1##*:} 但这在第二种情况下不起作用,当省略了port时;echo ${1##*:}只是返回主机名,而不是一个空字符串。 在Bash中,我可以这样做: IFS=: read A B <<< asdf:111 但这不适用于dash。 能否在拆分字符串:在仪表板,而无需调用外部程序(awk,tr,等)?
9 shell  string  dash 

3
用字符串变量保护Shell命令
在一种编程语言中,我执行一个简单的shell命令 cd var; echo > create_a_file_here 与var是一个变量,其中包含一个字符串(希望)到我要在其中创建文件“ create_a_file_here”的地方的目录。现在,如果有人看到这一行代码,则可以通过分配例如来利用它: var = "; rm -rf /" 事情可能变得很丑。避免上述情况的一种方法可能是在var中的字符串中搜索一些特殊字符,例如';'。在执行shell命令之前,但是我怀疑这是否涵盖了所有可能的漏洞利用。 有谁知道一种确保“ cd var”仅更改目录而没有其他更改的好方法?

10
Bash:提取IPv4地址的四个部分之一
我们可以使用语法${var##pattern}并${var%%pattern}提取IPv4地址的最后一部分和第一部分: IP=109.96.77.15 echo IP: $IP echo 'Extract the first section using ${var%%pattern}: ' ${IP%%.*} echo 'Extract the last section using ${var##pattern}: ' ${IP##*.} 我们如何使用参数扩展来提取IPv4地址的第二部分或第三部分? 这是我的解决方案:我使用数组并更改IFS变量。 :~/bin$ IP=109.96.77.15 :~/bin$ IFS=. read -a ArrIP<<<"$IP" :~/bin$ echo ${ArrIP[1]} 96 :~/bin$ printf "%s\n" "${ArrIP[@]}" 109 96 77 15 此外,我已经写了使用一些解决方案awk,sed以及cut命令。 现在,我的问题是:是否有一个不使用数组和IFS更改的基于参数扩展的简单解决方案?

4
PS输出ISO日期格式?
我想按lstart(过程开始)对输出进行排序: ps -eo lstart,pid,cmd 有没有办法以ISO格式输出lstart,例如YYYY-MM-DD HH:MM:SS? 但是单独排序不能解决问题。我真的很想拥有ISO日期格式。
9 shell  date  ps 

1
$ PWD的词源
的词源是$PWD什么?是缩写吗? 我知道有一个pwd可以打印工作目录的命令,但是在我看来,$CWD为当前工作目录命名该变量更有意义,因为外壳程序变量包含数据而不是打印它们。
9 shell  history  pwd 

1
为什么我不能打印在env输出中看到的变量?
我对设置一个外壳实例与另一个外壳实例的环境变量感兴趣。所以我决定做一些研究。阅读了许多与此有关的问题后,我决定对其进行测试。 我生成了两个外壳A和B(PID 420),它们都在运行zsh。从外壳程序AI运行以下命令。 sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach 从外壳B运行时,env我可以看到变量FOO确实设置为bar值。这使我认为FOO已在shell B的环境中成功初始化。但是,如果我尝试打印FOO,则会出现一个空行,表明未设置FOO。对我来说,这里似乎有矛盾。 这已在我自己的Arch GNU / Linux系统和Ubuntu VM上进行了测试。我还在bash变量甚至未在env中显示的地方对此进行了测试。尽管这让我感到失望,但如果shell在生成时缓存其环境的副本并仅使用它(在链接的问题之一中建议),则是有意义的。这仍然不能回答为什么zsh可以看到变量。 为什么输出为echo $FOO空? 编辑 输入评论后,我决定进行更多测试。结果可以在下表中看到。第一列是FOO注入变量的外壳。第一行包含该命令的输出,可以在其下面看到。FOO使用:注入变量sudo gdb -p 420 -batch -ex 'call setenv("FOO", "bar", 1)'。zsh:专用的命令zsh -c '...'也已使用bash进行了测试。结果是相同的,为简洁起见,省略了它们的输出。 Arch GNU / Linux,zsh 5.3.1,bash 4.4.12(1) | | env | grep FOO | echo …

1
回车命令回车
我正在练习带有选项\r(回车)的echo命令,如下所示。 echo -e "This is \r my college" 输出: my college 但是当我在\r下面再添加一个单词时 echo -e "This is the \r my college" 然后它给我输出像: my college the 另一个例子 echo -e "This is \r valid data" valid data echo -e "This is not a \r valid data" valid data a 所以,我想知道这里回车的实际目的是什么?
9 shell  echo  newlines 


3
这是什么形式的变量= $(…)
以下是什么意思: basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") 我对这部分感兴趣: varible=$(...) 我知道括号用于执行子流程,但是如果将其与一起使用会$怎样?
9 shell 



4
如果重定向失败,将不执行Bash程序
在bash中,我注意到,如果使用重定向的命令失败,则在此之前运行的任何程序都不会运行。 例如,此程序打开文件“ a”,并将50个字节写入文件“ a”。但是,运行此命令并将其重定向到权限不足的文件(〜root / log),文件大小“ a”不变。 $ ./write_file.py >> ~root/log -bash: /var/root/log: Permission denied cdal at Mac in ~/experimental/unix_write $ ls -lt total 16 -rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES 有人会认为程序会运行,捕获所有输出(但也会写入文件“ a”),然后无法将任何输出写入〜root / log。而是永远不会运行该程序。 为什么会这样,bash在执行程序之前如何选择执行的“检查”的顺序?是否还要执行其他检查? ps我试图确定在cron下运行的程序在重定向到“权限被拒绝”文件时是否真的运行了。

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.