我有一个脚本,可以将多个子文件夹和存档中的所有文件搜索到 tar。我的脚本是
for FILE in `find . -type f -name '*.*'`
do
if [[ ! -f archive.tar ]]; then
tar -cpf archive.tar $FILE
else
tar -upf archive.tar $FILE
fi
done
Run Code Online (Sandbox Code Playgroud)
find 命令给了我以下输出
find . -type f -iname '*.*'
./F1/F1-2013-03-19 160413.csv
./F1/F1-2013-03-19 164411.csv
./F1-FAILED/F2/F1-2013-03-19 154412.csv
./F1-FAILED/F3/F1-2011-10-02 212910.csv
./F1-ARCHIVE/F1-2012-06-30 004408.csv
./F1-ARCHIVE/F1-2012-05-08 190408.csv
Run Code Online (Sandbox Code Playgroud)
但是FILE变量只存储路径的第一部分./F1/F1-2013-03-19,然后是下一部分160413.csv。
我尝试使用readwhile 循环,
while read `find . -type f -iname '*.*'`; do ls $REPLY; done
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
bash: read: `./F1/F1-2013-03-19': not a valid …Run Code Online (Sandbox Code Playgroud) 我想知道如何编写Exec.desktop 文件的命令来打开一个新终端并在其中执行一个 shell 脚本。shell 脚本正在运行,所有用户都可以访问。从终端启动脚本时一切正常,但在尝试从 .desktop 文件启动脚本时却没有。
以下是我已经尝试过的一些组合:
Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello
Run Code Online (Sandbox Code Playgroud)
.desktop 终端选项设置为 true。
如果我想执行一个没有设置执行权限的 bash 脚本,我可以这样做:
bash script.sh
Run Code Online (Sandbox Code Playgroud)
bash如果脚本不可执行并且我不知道正确的解释器,我应该使用什么来代替?是否有一个命令可以从 shebang 行查找解释器并用它执行脚本?
有谁知道如何编写 shell 脚本来安装应用程序列表?每次设置新系统时都必须手动安装每个应用程序,这很痛苦。
编辑:
它仍然问我Do you want to continue [Y/n]?。有没有办法让脚本输入y或不提示输入?
有没有办法通过脚本向用户的 cron 添加行?
我通常使用crontab -e,但我想使用 shell 脚本自动执行此任务。
我需要将以下行添加到 Ubuntu 中 .bashrc 文件的末尾。如何使用脚本自动添加这些行。如果我运行脚本,它会自动在 .bashrc 文件的末尾插入行。
export APP="/opt/tinyos-2.x/apps"
export TOS="/opt/tinyos-2.x/tos"
Run Code Online (Sandbox Code Playgroud) 我编写了一个 bash 脚本,它调用其他几个程序并执行一堆命令。我从终端运行这个脚本。现在我想杀死脚本。
Ctrl + C有时按下并不会切断它,我认为是因为有时脚本正在执行另一个程序,并且出于某种原因终止信号不起作用。
但是,如果我关闭终端窗口,它会杀死脚本。
有什么我可以做的(键盘组合),类似于关闭终端窗口,而不实际关闭终端窗口(我不想丢失命令历史记录、当前目录、输出历史记录等)?
我的/etc/rc.local脚本中有一个命令,它应该在启动期间启动Tiny Tiny RSS的更新守护程序,但在启动期间不执行该脚本。为什么?
整个 /etc/rc.local 文件:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet …Run Code Online (Sandbox Code Playgroud) 我已经开始使用本指南学习 bash 脚本:http : //www.tldp.org/LDP/abs/abs-guide.pdf
但是我被困在第一个脚本上:
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Log files cleaned up."
Run Code Online (Sandbox Code Playgroud)
第 2 行和第 3 行在 Ubuntu 中做什么(我理解cat)?它仅适用于其他 Linux 发行版吗?以 root 身份运行此脚本后,我得到的输出是Log files cleaned up.但/var/log仍包含所有文件。
我正在寻找“。”之间的区别。和“源”内置命令和一些源(例如,在本讨论中,以及bash 手册页)表明它们是相同的。
但是,由于环境变量的问题,我进行了测试。我创建了一个testenv.sh包含以下内容的文件:
#!/bin/bash
echo $MY_VAR
Run Code Online (Sandbox Code Playgroud)
在命令提示符下,我执行了以下操作:
> chmod +x testenv.sh
> MY_VAR=12345
> ./testenv.sh
> source testenv.sh
12345
> MY_VAR=12345 ./testenv.sh
12345
Run Code Online (Sandbox Code Playgroud)
[注意第一种形式返回一个空字符串]
所以,这个小实验表明,有是毕竟有差别,其中的“源”命令,孩子的环境继承所有从父之一,这里的变量“” 它不是。
我是否遗漏了什么,或者这是bash的未记录/不推荐使用的功能?
[GNU bash,版本 4.1.5(1)-release (x86_64-pc-linux-gnu)]
scripts ×10
bash ×4
command-line ×4
.desktop ×1
apt ×1
automation ×1
bashrc ×1
boot ×1
cron ×1
environment ×1
executable ×1
filesystem ×1
find ×1
server ×1
shebang ×1
startup ×1
tt-rss ×1