- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何在 shell 脚本中使用相对路径 或绝对路径 作为单个命令行参数?
例如,假设我的 shell 脚本在我的桌面上,我想遍历文件系统中某个文件夹中的所有文本文件。
我尝试了 sh myshscript.sh/home/user/Desktop
,但这似乎不可行。以及如何避免目录名和文件名包含空格?
myshscript.sh 包含:
for i in `ls`
do
cat $i
done
最佳答案
从表面上看,你可以这样写:
cd "${1:-.}" || exit 1
for file in *
do
cat "$file"
done
除非在这种情况下你真的不需要 for
循环:
cd "${1:-.}" || exit 1
cat *
会完成这项工作。您可以通过以下方式避免 cd
操作:
cat "${1:-.}"/*
列出 (cat
s) 给定目录中的所有文件,即使目录或文件名包含空格、换行符或其他难以管理的字符。您可以使用任何适当的 glob 模式代替 *
— 如果您想要文件以 .txt
结尾,则使用 *.txt
作为模式,例如。
如果您可能有太多文件以至于参数列表太长,这就会崩溃。在这种情况下,您可能需要使用 find
:
find "${1:-.}" -type f -maxdepth 1 -exec cat {} +
(注意 -maxdepth
是 GNU find
扩展。)
避免使用 ls
生成文件名列表,尤其是当脚本必须在名称中的空格、换行符等方面保持健壮时。
关于linux - 如何在 Bourne shell 脚本中打开目录中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564564/
我想在 Bourne shell 中编写一个循环来迭代一组特定的数字。通常我会使用 seq : for i in `seq 1 10 15 20` #do stuff loop 但是貌似在这个S
我正在尝试根据正则表达式验证用户输入。 vari=A if [ $vari =~ [A-Z] ] ; then echo "hurray" fi 我得到的输出是 swf.sh[3]: =~:
我正在尝试对脚本中的输出数据进行一些格式化,但不知道如何进行左右对齐以及宽度。谁能指出我正确的方向? 最佳答案 你可以使用printf。示例 $ printf "%15s" "col1" $ prin
我有一个运行在预设环境变量包括的地方的 shell: FOOCOUNT=4 FOO_0=John FOO_1=Barry FOO_2=Lenny FOO_3=Samuel 我无法改变获取这些数据的方式
我有以下脚本 cat $1 | while read line do line=`echo $line | tr "[:lower:]" "[:upper:]"` if [ "`ech
$ freebsd-version 10.3-RELEASE-p17 $ portinstall() { port="$1"; shift env="$@" #1 en
(这间接地是更大的家庭作业的一部分) 我有类似的东西 在阅读 LINE 时 做 事情完成到$LINE echo "输入输入:" 读取输入 完成到 $INPUT 的事情 完成 我找不到使用控制台/默认标
编写 Bash 脚本或 Bourne 脚本哪个更好?我的团队编写 Bourne 脚本,但我不完全确定为什么。 如果这是一个圣战问题(即:vim vs. emacs)请直接回复:圣战。 最佳答案 这取决
我有很多变量 var1 var2 ... varx 可能为空也可能不为空。我不想有多个 if 语句并且想知道如何进行循环,我向其提供变量列表并检查它们是否为空。如果一个变量为空,它的值应该设置为- 最
我正在使用 bourne shell 并想执行以下操作: COUNTER=0 CIRCLEPART1="|" CIRCLEPART2="/" CIRCLEPART3="--" CIRCLEPART4=
我在 Upstart 脚本中使用 echo 来记录事情: script echo "main: some data" >> log end script post-start script
最近我一直在尝试在 Ubuntu 中自定义位于 ~/.profile 的 shell 配置文件。我想做的一件事是: # PATH-like variable containing paths sepa
我想重复 # 10 次,比如: "##########" 如何在 Bourne shell (/bin/sh) 中执行此操作?我试过使用 print,但我猜它只适用于 bash shell。 请不要给
假设我有一些可以接受多个选项的实用程序,每个选项后跟一个文件名。例如,我可以将其称为 myutil , myutil -o somefile , myutil -p anotherfile , myu
这个问题在这里已经有了答案: Delete specific line number(s) from a text file using sed? (7 个回答) 5年前关闭。 我正在 Bourne
我想测试一个字符串是否有“子字符串”。大多数在线答案都基于 Bash。我试过了 if [ $string == "*substring*" ] 这是行不通的。现在 if echo ${string}
这个问题在这里已经有了答案: When to wrap quotes around a shell variable? (5 个回答) 6年前关闭。 我想创建一些脚本来填充一些模板并将它们插入到我的项
我需要比较 shell 中的字符串: var1="mtu eth0" if [ "$var1" == "mtu *" ] then # do something fi 但显然“*”在 shel
在bourne shell中,我有以下内容: VALUES=`some command that returns multiple line values` echo $VALUES 好像: "ONE
我有一个 Bourne shell (/bin/sh) 脚本(为了可移植性)想要监视另一个程序。它应该启动另一个程序,然后等待它退出。当第二个程序退出时,它会做一些最后的工作并自行退出。问题是脚本还需
我是一名优秀的程序员,十分优秀!