我知道
ls -d */
Run Code Online (Sandbox Code Playgroud)
将当前目录中的所有文件夹列为dir1/ dir2/ dir3/.
bash 脚本中是否有可能将文件夹显示为dir1 dir2 dir3?
我正在编写 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) 我在 shell 中玩耍并输入 ./. 我去以下输出:
bash: ./: Is a directory
Run Code Online (Sandbox Code Playgroud)
看起来像“./”检查是否存在具有给定名称的目录。我试图找到这方面的文档,看看我的理解是否正确,但在网上找不到任何东西。谁能给我解释一下这个?
在脚本中,我收到了一些表单警告awk: warning: escape sequence \( treated as plain (。由于我想使用该脚本的输出来做事,我希望它只输出结果而不是警告。
我可以轻松纠正该警告,但是有没有办法消除 awk 中的所有警告?
如何删除目录树中的所有 *.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 历史记录运行带有历史记录中命令参数的命令?
我知道我可以!!用来重新运行最后一个命令,但是如何使用这些参数运行新命令?
例如,我首先运行:
~/somefolder/script.sh somefile
Run Code Online (Sandbox Code Playgroud)
我要快跑
~/somefolder/script.sh anotherfile
Run Code Online (Sandbox Code Playgroud)
我试过了,!! anotherfile但没有用。
或者更好的是,我如何运行!-2 newarguments以使用新参数运行倒数第二个历史命令?
我不想使用箭头来滚动历史,然后在参数上退格。
在搜索一个简单的 bash 函数来回显我的外部 IP 地址时,我遇到了这篇文章,其中包含以下示例:
function ext-ip () { curl http://ipecho.net/plain; echo; }
Run Code Online (Sandbox Code Playgroud)
我想知道echo在这种情况下是如何工作的;手册页curl和echo联机帮助页都不是很有帮助。为什么它会回显上一个curl命令的响应体?与例如相比,以这种方式做有什么好处echo "$(curl -s http://ipecho.net/plain)"吗?我只是问,因为后者的语法似乎更透明/直截了当。
我不小心在没有主目录的情况下向我的系统添加了一个用户(我忘记在 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:
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) 我有一个相对简单的 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.
但是只要是第一次手动执行,它就可以正常工作。