为什么当我尝试将一个函数仅在一行中写入.bashrc文件时,
list(){ ls -a }
Run Code Online (Sandbox Code Playgroud)
我得到错误?
bash: /home/username/.bashrc: line num: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
但是当我用多行写它时可以吗?
list(){
ls -a
}
Run Code Online (Sandbox Code Playgroud) 我有一个 Bash shell 函数,它接受一个参数并在需要时对其执行一些操作。
do_something() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Run Code Online (Sandbox Code Playgroud)
我想用几个参数调用这个方法,并检查是否至少有一个成功。
我试过类似的东西:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Run Code Online (Sandbox Code Playgroud)
另外,我想确保即使第一个条件为真,所有其他条件仍将被评估。
什么是正确的语法?
我见过许多接受“BSD 语法”及其标准语法的命令。以ps命令为例:
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
To see every process on the system using BSD syntax:
ps ax
ps axu
Run Code Online (Sandbox Code Playgroud)
那么这两条路线有什么区别呢?一般来说,当他们在 BSD 语法中说我应该记住哪些元素时?这种语法是否也仅适用于它们在 BSD 中的那些命令?
我是终端的新手,正在尝试学习如何使用它。
这些线有什么作用?它们是如何工作的?
echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Run Code Online (Sandbox Code Playgroud) 我使用以下命令清除一个目录,其中包含超过 30 天的文件和目录,并将它们移动到一个存档目录,如果没有人要求取回他们的文件,我可以在几周后将其删除。目标目录有用户名的子目录,归档目录也有。
这是我使用的命令:
find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;
Run Code Online (Sandbox Code Playgroud)
我建议修改此版本来回答有关 ask ubuntu 的问题,另一个用户编辑了代码以更改行尾\;,+因为它更快(并且更正确?)。看这里
但是,+如果该-exec命令ls -lh不在我使用的实际命令中,则以这种方式使用是有效的。如果我尝试它,+我会收到一条错误消息:
find: missing argument to '-exec'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它会这样,或者正确的命令是什么。请不要只是发布命令更正,我想了解而不是盲目地遵循建议。
BASH 脚本中的“空”运算符有什么意义?我知道if当您无话可说但需要一个命令来让程序正常运行时,它被用作命令后面的占位符。但它的总体用途是什么?你会在什么时候使用它?什么时候使用它才有意义?
我需要提取一个shasum。这有效,但谁能解释为什么?
sed 's/^.*= //' -< <(openssl dgst -sha256 filename)
Run Code Online (Sandbox Code Playgroud)
我熟悉这个$( )构造,但找不到<( ),加上 的文档-<,我认为它正在重定向到标准输入sed。
我知道有更简单的方法,但这种结构让我望而却步。
这在 OSX 上完美运行
#!/bin/bash
chars=( {a..z} )
n=3
for ((i=0; i<n; i++))
do
echo "${chars[i]}"
done
Run Code Online (Sandbox Code Playgroud)
但是当我在 Ubuntu 上运行它时,出现以下错误。
ForLoopAlphabetTest.sh: 2: ForLoopAlphabetTest.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
我似乎无法解决问题。有什么建议?
出于某种奇怪的原因,我尝试了“'”作为标识符中的单词分隔符,如下所示:
$ export foo'bar=1
>
> ^C
$
Run Code Online (Sandbox Code Playgroud)
结果如上所示,id est提示更改为“>”,系统显然在等待我的更多信息。如您所见,我必须按 ctrl-C 才能逃脱。使用其他命令也会发生同样的情况,例如
$ ls foo'bar
$ mkdir foo'bar
Run Code Online (Sandbox Code Playgroud)
我很好奇这一切的意义,这就是“'”在终端命令中的特殊含义(实际上它非常特殊,甚至在 id 内部也被拆开)。
额外:顺便说一句,我还想知道在类 Unix 和 Windows 系统下的文件和文件夹名称中的特殊或其他无效字符集(以获得安全的公共子集)(特别是所有非 ASCII?)。
谢谢你,丹尼斯
今天我打开gnome-terminal并写了
ls && sleep 4 && gnome-terminal
Run Code Online (Sandbox Code Playgroud)
ls命令完成后打开另一个终端并等待4秒。
因此,在之前的命令完全运行(包括sleep 4)后,它成功地打开了一个新终端。
之后,下次我输入新命令时
ls -lR && sleep 4 && gnome-terminal
Run Code Online (Sandbox Code Playgroud)
该命令ls -lR在 3 秒后完成,但之后没有任何命令sleep 4并gnome-terminal成功运行。
问题是什么?