Questions tagged «shell»

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

2
双引号内的单引号和Bash参考手册
Bash手册在标题为双引号的第3.1.2.3节中说: 用双引号('“')引起来的字符将保留所有引号内的字符的文字值,但'$','`','\'除外,并且在启用历史记录扩展时,会使用'!'。 目前,我关心的是单引号(')。 在上一节第3.1.2.2节中描述的特殊含义是: 将字符括在单引号(')中可保留引号内每个字符的字面值。即使在单引号前加反斜杠,也不能在单引号之间引起单引号。 结合两个论述, echo "'$a'" 其中a未定义变量(因此$a=空字符串),应$a在屏幕上打印,因为'',如果它在内部具有特殊含义,则可以避免$特殊解释。而是打印''。为什么这样?
18 bash  shell  quoting 

1
退出程序时,“ man”如何还原屏幕?
如果我打开诸如cat或的程序的手册页ls,它会打印(可能不是适当的单词)手册页的内容,当我按时q,它将显示屏幕,就像调用man命令之前一样。恢复如何发生?什么会擦除所有内容,然后打印外壳的先前内容? 例: [VAR121@Tesla Testing]$ man ls 输出: LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... ............ 当我按时q,屏幕将返回外壳的默认外观,如下面所示的提示。 [VAR121@Tesla Testing]$ man ls [VAR121@Tesla Testing]$ 屏幕如何还原?
18 bash  shell  terminal  man 

3
如何推迟变量扩展
我想用尚未设置的变量来初始化脚本顶部的一些字符串,例如: str1='I went to ${PLACE} and saw ${EVENT}' str2='If you do ${ACTION} you will ${RESULT}' 再后来PLACE,EVENT,ACTION,和RESULT将被设置。然后,我希望能够将变量扩展后的字符串打印出来。是我唯一的选择eval吗?这似乎可行: eval "echo ${str1}" 这是标准吗?有一个更好的方法吗?最好不要eval考虑变量可以是任何东西而运行。
18 bash  shell  string 



4
为什么grep在这里使用管道不起作用?
我有以下命令: find / -name libGL.so.1 它返回很多行与“权限被拒绝”。我想排除这些行,因此添加了以下内容: find / -name libGL.so.1 | grep -v 'denied' 但是输出是相同的-我grep -v 'denied'没有用过滤掉行Permission denied。我尝试了许多变体,查看了grep教程,但无法弄清楚问题所在。有什么建议么?
18 shell  grep  pipe 

3
env,setenv,export和何时使用之间有什么区别?
最近,我注意到我们有3个设置环境变量的选项: export envVar1=1 setenv envVar2=2 env envVAr3=3 如果还有其他方法,请赐教。 我什么时候比另一个更喜欢?请提出准则。 至于外壳兼容性,哪一个是最广泛的(涵盖更多的外壳方言)? 我已经注意到了这个答案,但是我希望扩大使用范围env和使用偏好指南。

4
如何在源代码中的read -p提示符下将长字符串分成多行?
我正在编写将以方式运行的安装脚本/bin/sh。 有一行提示输入文件: read -p "goat can try change directory if cd fails to do so. Would you like to add this feature? [Y|n] " REPLY 我想把这条长行分成多行,以使它们都不超过80个字符。我说的是脚本源代码中的几行;与执行脚本时要在屏幕上实际打印的行无关! 我尝试过的 第一手方法: read -p "goat can try change directory if cd fails to do so. " \ "Would you like to add this feature? …

5
如果未定义变量,请避免运行脚本
我有一个脚本看起来像: c=0 for f in */*; do cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)" c=$((c=c+1)) done 但是,用户必须提供一个调用BATCHNUM的变量,否则我需要强制该脚本停止运行。如果我也可以强制停止调用此脚本的脚本(甚至是调用#2脚本的#1脚本也要停止),那会更好。

3
通过外壳脚本找不到命令,但可在终端上使用
在我的.sh文件中,我无法调用ant或mv或cp命令,但在终端上执行相同的命令。以下是我的脚本 sample.sh文件 #! /bin/sh cp filename.so filename_org.so android update project -p . ant clean ant release .bashrc文件中添加的路径。 export PATH=$PATH:/usr/bin/ cp,mv,ant仅在终端下无法通过scirpt运行。
18 shell 

5
滚动差异来存储高度相似的文件?
在工作中,我们每晚进行mysql数据库转储。每天,我都会想像一下近90-95%的数据是重复的,并且随着时间的推移而增加。(在这一点上,大概是99%) 这些转储的一行仅是一条mysql INSERT语句,因此唯一的区别是整行以及它们在文件中的排列顺序。如果我将它们排序,则文件之间的实际差异将很小。 我一直在寻找,而且还没有找到对转储输出进行排序的任何方法。不过,我可以通过sort命令来传递它。然后将有很长很长的相同行的块。 因此,我试图找到一种仅存储差异的方法。我可以从一个主转储开始,然后每晚与之比较。但是差异每晚都会更大。或者,我可以制作滚动差异,每个差异非常小,但是如果我每晚必须整理整个系列的主要差异,似乎计算时间会越来越长。 这可行吗?用什么工具? 编辑我不问如何做mysql备份。暂时忘记mysql。这是一条红鲱鱼。我想知道的是如何从一系列文件中生成一系列滚动差异。每天晚上,我们都会收到一个文件(恰好是mysqldump文件),与之前的文件相似,为99%。是的,我们将它们全部压缩。但是将所有这些冗余放在首位是多余的。我真正需要的是与前一天晚上的区别……与前一天晚上的区别仅……1%,依此类推。因此,我要做的是如何进行一系列比较,以便每晚只存储1%。


3
POSIX为什么未指定`#!`语法的行为?
在POSIX规范的Shell命令语言页面中: 如果shell命令文件的第一行以字符“#!”开头,则结果不确定。 为什么#!POSIX无法指定行为?我感到困惑的是,如此便携式和广泛使用的东西将具有未指定的行为。
17 shell  posix  shebang 


5
像$ 0和$ 1这样的变量是否是shell /环境变量?
还有在shell变量一样$0,$1,$2,$?,等。 我尝试使用以下命令打印shell和环境变量: set 但是这些变量不在列表中。 因此,基本上,这些变量不被视为外壳/环境变量,对吗?(即使要输出它们,也必须$像在shell / environment变量中一样在它们前面加上)
17 shell 

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.