标签: bash

如何在没有尾随 / 的情况下列出 bash 中的文件夹

我知道

ls -d */
Run Code Online (Sandbox Code Playgroud)

将当前目录中的所有文件夹列为dir1/ dir2/ dir3/.

bash 脚本中是否有可能将文件夹显示为dir1 dir2 dir3

linux bash path

3
推荐指数
2
解决办法
8669
查看次数

对 tcsh/csh 中不存在的文件使用“>>”重定向运算符

我正在编写 tcsh 脚本,我想附加到一个日志文件,但是如果在附加到它之前日志文件不存在,我会收到一个错误(在下面重现)。在 bash 中,如果文件不存在,则会创建该文件。tcsh 是否支持此功能,或者我是否必须在追加之前确保该文件存在?

有没有办法>>在 tcsh 中使用类似于 bash的运算符?

$ echo something >> file_that_does_not_exist
file_that_does_not_exist: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

bash shell shell-script tcsh

3
推荐指数
1
解决办法
3424
查看次数

BASH 中的 ./ 是什么

我在 shell 中玩耍并输入 ./. 我去以下输出:

bash: ./: Is a directory
Run Code Online (Sandbox Code Playgroud)

看起来像“./”检查是否存在具有给定名称的目录。我试图找到这方面的文档,看看我的理解是否正确,但在网上找不到任何东西。谁能给我解释一下这个?

bash command-line

3
推荐指数
1
解决办法
309
查看次数

禁止 awk 警告

在脚本中,我收到了一些表单警告awk: warning: escape sequence \( treated as plain (。由于我想使用该脚本的输出来做事,我希望它只输出结果而不是警告。

我可以轻松纠正该警告,但是有没有办法消除 awk 中的所有警告?

bash awk

3
推荐指数
2
解决办法
1万
查看次数

删除目录树中的所有 *.foo

如何删除目录树中的所有 *.foo?

rm -r *.foo
Run Code Online (Sandbox Code Playgroud)

不起作用。

我可以尝试一个循环,但这需要递归扩展:

for x in */*/.../*.foo
    do rm $x
done
Run Code Online (Sandbox Code Playgroud)

这也是不可能的。

bash rm

3
推荐指数
1
解决办法
366
查看次数

如何使用 bash 历史记录使用历史记录中的参数运行命令?

如何使用 bash 历史记录运行带有历史记录中命令参数的命令?

我知道我可以!!用来重新运行最后一个命令,但是如何使用这些参数运行新命令?

例如,我首先运行:

~/somefolder/script.sh somefile
Run Code Online (Sandbox Code Playgroud)

我要快跑

~/somefolder/script.sh anotherfile
Run Code Online (Sandbox Code Playgroud)

我试过了,!! anotherfile但没有用。

或者更好的是,我如何运行!-2 newarguments以使用新参数运行倒数第二个历史命令?

我不想使用箭头来滚动历史,然后在参数上退格。

bash history

3
推荐指数
1
解决办法
265
查看次数

`echo` 在这种情况下如何工作?:`externalip() { curl http://ipecho.net/plain; 回声; }`

在搜索一个简单的 bash 函数来回显我的外部 IP 地址时,我遇到了这篇文章,其中包含以下示例:

function ext-ip () { curl http://ipecho.net/plain; echo; }
Run Code Online (Sandbox Code Playgroud)

我想知道echo在这种情况下是如何工作的;手册页curlecho联机帮助页都不是很有帮助。为什么它会回显上一个curl命令的响应体?与例如相比,以这种方式做有什么好处echo "$(curl -s http://ipecho.net/plain)"吗?我只是问,因为后者的语法似乎更透明/直截了当。

linux bash command-line echo

3
推荐指数
1
解决办法
3029
查看次数

bash 没有确定性地处理星号通配符

我不小心在没有主目录的情况下向我的系统添加了一个用户(我忘记在 useradd 中放置 -d 和 -m 标志)。我没有删除用户并重新开始,而是尝试简单地 mkdir 主目录并自己从 /etc/skel 复制文件。但是,我收到以下奇怪的错误:

user@host:~$ sudo cp -rv /etc/skel/* /home/newuser/
cp: cannot stat `/etc/skel/*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,以下两个命令按预期工作:

user@host:~$ sudo cp -rv /etc/skel/.bashrc /home/newuser/
user@host:~$ cp -rv ~/testfolder1/* /testfolder2/
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么我收到初始错误。

bash wildcards

3
推荐指数
1
解决办法
1497
查看次数

如何从 Bash 以 root 身份登录并执行操作

这是我的简单 bash:

cat test.sh

#!/bin/bash 
echo "hello"
su - root -c /path/to/script.sh <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

./test.sh
hello
su: must be run from a terminal
<current-user>
good bye
Run Code Online (Sandbox Code Playgroud)

(或者)

cat test2.sh
#!/bin/bash 
echo "hello"
sudo su <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

又一个错误

(或者)

cat test3.sh
#!/bin/bash 
echo "hello"
su root <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

又是错误...

当我尝试:

#!/bin/bash
echo "hello"
sudo -s <<EOF
<password>
echo Now I am root
id                                                                      
echo "yes!" …
Run Code Online (Sandbox Code Playgroud)

linux sudo bash login su

3
推荐指数
1
解决办法
2万
查看次数

为什么此脚本在从 cron 运行时失败,但在手动运行时有效?

我有一个相对简单的 bash 脚本,在直接调用时效果很好,但在由 cron 运行时失败。为什么这会失败,我如何通过 cron 使其工作?

#!/bin/bash
apt-get update -y
apt-get upgrade -y
apt-get install boinc-client -y
Run Code Online (Sandbox Code Playgroud)

一旦 cron 尝试运行它,手动调用将导致此错误:

dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

但是只要是第一次手动执行,它就可以正常工作。

linux bash cron ubuntu

3
推荐指数
1
解决办法
9183
查看次数

标签 统计

bash ×10

linux ×4

command-line ×2

awk ×1

cron ×1

echo ×1

history ×1

login ×1

path ×1

rm ×1

shell ×1

shell-script ×1

su ×1

sudo ×1

tcsh ×1

ubuntu ×1

wildcards ×1