Questions tagged «shell»

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



5
将当前日期从变量追加到文件名
我正在尝试将当前日期附加到文件名的末尾,如下所示: TheFile.log.2012-02-11 这是我到目前为止的内容: set today = 'date +%Y' mkdir -p The_Logs & find . -name The_Logs -atime -1 -type d -exec mv \{} "The_Logs_+$today" \; & 但是,我得到的只是文件的名称,它不附加任何内容。如何将当前日期附加到文件名?
55 bash  shell  rename  date 

10
如何在两个遥控器之间同步文件?
我想在本地外壳上使用两个远程主机之间传输文件,但是如果按如下所示指定两个远程,则rsync似乎不支持同步: $ rsync -vuar host1:/var/www host2:/var/www The source and destination cannot both be remote. 我还可以使用其他哪些解决方法/命令来获得相似的结果?
54 shell  ssh  rsync 


8
使“ rm”移至垃圾箱
是否有Linux脚本/应用程序,而不是删除文件,而是将其移动到特殊的“垃圾箱”位置?我希望以此作为替代rm(甚至可以别名后者;对此有优缺点)。 “垃圾箱”是指一个特殊的文件夹。单mv $* ~/.trash是第一步,但理想的,这也应该处理捣毁了多个同名的文件,而不会覆盖旧的丢弃的文件,并允许恢复文件到原始位置用一个简单的命令(一种“撤消”)。此外,如果垃圾桶在重新启动时自动清空(或采用类似的机制来防止不断增长的垃圾),那就太好了。 存在对此的部分解决方案,但是特别是“恢复”动作并非微不足道。是否有不依赖图形外壳垃圾系统的现有解决方案? (顺便说一句,关于这种方法是否合理,一直在进行无休止的讨论,而不是使用频繁的备份和VCS。尽管这些讨论是有道理的,但我认为我的要求仍然存在。)
54 shell  rm 

2
相当于“ tail -f”的“较少”命令行
我想用更少的空间打开文件,并让它自动滚动类似于的文件tail -f。 我知道我能做less file,然后Shift-F永远向前迈进;喜欢tail -f。 我需要less它--raw-control-chars,因为它提供了标志,这是必需的,因为我的输入是彩色的。
54 shell  less  tail 

3
如何使环境变量在shell脚本中“导出”?
我有多个Amazon EC2帐户,并希望能够$EC2_HOME使用脚本快速切换变量,例如。 我有一个这样的shell脚本设置: #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME 当我运行脚本时,我知道EC2_HOME已经设置好了,但是我认为使用export脚本会使变量在脚本完成后继续存在。它不会,因为运行echo $EC_HOME不会显示任何内容。 我知道这一定是非常基本的Linux脚本知识,但是我不知道。我尝试寻找相关问题时没有运气-如果这是重复的话,我深表歉意。

4
为什么波浪号(〜)不能在双引号内展开?
根据这个答案和我自己的理解,波浪号将扩展到主目录: $ echo ~ /home/braiam 现在,每当我希望shell扩展能够正常工作时,即使用诸如这样的变量名$FOO,并且不要因为意外的字符,诸如此类的空格等而中断。应该使用双引号": $ FOO="some string with spaces" $ BAR="echo $FOO" $ echo $BAR echo some string with spaces 为什么此扩展不适用于代字号? $ echo ~/some/path /home/braiam/some/path $ echo "~/some/path" ~/some/path
54 shell 


4
Bash star *通配符是否总是产生(升序)排序列表?
我有一个目录,其中填充了一些文件名logXX,其中XX是一个两个字符,零填充的大写十六进制数字,例如: log00 log01 log02 ... log0A log0B log0C ... log4E log4F log50 ... 通常,总共少于20个或30个文件。我的特定系统上的日期和时间不可靠(嵌入式系统没有可靠的NTP或GPS时间源)。但是,文件名将可靠地增加,如上所示。 我希望grep浏览所有文件中某个类型的最新日志条目,我希望将cat这些文件放在一起,例如... cat /tmp/logs/log* | grep 'WARNING 07 -' | tail -n1 然而,它发生,我认为不同版本bash或sh或zsh等可能有关于如何不同的想法*展开。 该man bash页面没有说明的扩展是否*一定是匹配文件名的绝对升序字母列表。每当我在所有可用的系统上尝试过该功能时,它的数量似乎都会不断增加,但是它是行为定义的还是特定于实现的? 换句话说,我可以绝对依赖cat /tmp/logs/log*于按字母顺序将所有日志文件连接在一起吗?
53 bash  shell  wildcards 

6
有什么理由让shebang指向/ bin / sh而不是/ bin / bash吗?
在我见过的大多数shell脚本中(除了我自己没有写过的脚本之外),我注意到shebang设置为#!/bin/sh。对于旧的脚本,这并不令我感到意外,但是在相当新的脚本中也是如此。 是否有理由宁愿使用/bin/shover /bin/bash,因为bash在十年前的许多Linux和BSD机器上,它普遍存在并且通常是默认的吗?
53 bash  shell  history  shebang 

1
“ rm。*”是否会删除父目录?
.*bash 将表达式扩展为包括当前目录和父目录: $ ls -la total 2600 drwxrwxrwx 2 terdon terdon 2162688 Sep 10 16:22 . drwxr-xr-x 142 terdon terdon 491520 Sep 10 15:34 .. -rw-r--r-- 1 terdon terdon 0 Sep 10 16:22 foo $ echo .* . .. 如果我rm -rf .*使用GNU bash在Debian上运行,version 4.2.36(1)-release并且rm从中rm (GNU coreutils) 8.13获得以下消息: $ rm -rf …
53 shell  wildcards  rm  posix 

7
在Shell脚本中超时
我有一个shell脚本,多数民众赞成从标准输入读取。在极少数情况下,将没有人准备提供输入,并且脚本必须超时。如果超时,脚本必须执行一些清理代码。最好的方法是什么? 该脚本必须具有很高的可移植性,包括没有C编译器的20世纪Unix系统和运行busybox的嵌入式设备,因此不能依赖Perl,bash,任何编译语言,甚至是完整的POSIX.2。特别是$PPID,read -t和完全POSIX兼容的陷阱不可用。还不包括写入临时文件;即使所有文件系统都是只读安装的,脚本也可能运行。 为了使事情变得更困难,我还希望脚本在不超时的情况下保持合理的速度。特别是,我还在Windows(主要在Cygwin中)中使用了脚本,其中fork和exec的比例特别低,因此我希望将其使用量降至最低。 简而言之,我有 trap cleanup 1 2 3 15 foo=`cat` 我想添加一个超时。我不能cat用read内置的替换。如果超时,我想执行该cleanup功能。 背景:此脚本通过打印一些8位字符并比较前后的光标位置来猜测终端的编码。脚本的开头测试了stdout是否连接到受支持的终端,但是有时环境在说谎(例如,即使使用调用也要plink设置TERM=xtermTERM=dumb)。脚本的相关部分如下所示: text='Éé' # UTF-8; shows up as Ãé on a latin1 terminal csi='␛['; dsr_cpr="${csi}6n"; dsr_ok="${csi}5n" # ␛ is an escape character stty_save=`stty -g` cleanup () { stty "$stty_save"; } trap 'cleanup; exit 120' 0 1 2 3 …
53 shell  signals  timeout 

1
了解`find`的-exec选项
我发现自己一直在寻找 find . -name "FILENAME" -exec rm {} \; 主要是因为我看不到该-exec零件的工作原理。花括号,反斜杠和分号的含义是什么?该语法还有其他用例吗?
53 shell  find 

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.