标签: scripts

带有空格的文件名 for 循环,查找命令

我有一个脚本,可以将多个子文件夹和存档中的所有文件搜索到 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)

bash scripts find

48
推荐指数
3
解决办法
11万
查看次数

创建一个在终端中打开并执行命令的 .desktop 文件

我想知道如何编写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。

command-line scripts .desktop

47
推荐指数
1
解决办法
13万
查看次数

是否有根据其shebang行运行脚本的命令?

如果我想执行一个没有设置执行权限的 bash 脚本,我可以这样做:

bash script.sh
Run Code Online (Sandbox Code Playgroud)

bash如果脚本不可执行并且我不知道正确的解释器,我应该使用什么来代替?是否有一个命令可以从 shebang 行查找解释器并用它执行脚本?

command-line scripts executable shebang

47
推荐指数
3
解决办法
5566
查看次数

如何编写 shell 脚本来安装应用程序列表?

有谁知道如何编写 shell 脚本来安装应用程序列表?每次设置新系统时都必须手动安装每个应用程序,这很痛苦。

编辑: 它仍然问我Do you want to continue [Y/n]?。有没有办法让脚本输入y或不提示输入?

command-line apt scripts software-installation

46
推荐指数
4
解决办法
14万
查看次数

从脚本向 cron 添加行

有没有办法通过脚本向用户的 cron 添加行?

我通常使用crontab -e,但我想使用 shell 脚本自动执行此任务。

scripts cron automation

45
推荐指数
2
解决办法
6万
查看次数

通过脚本将环境变量添加到 .bashrc

我需要将以下行添加到 Ubuntu 中 .bashrc 文件的末尾。如何使用脚本自动添加这些行。如果我运行脚本,它会自动在 .bashrc 文件的末尾插入行。

export APP="/opt/tinyos-2.x/apps"
export TOS="/opt/tinyos-2.x/tos"
Run Code Online (Sandbox Code Playgroud)

scripts bashrc

45
推荐指数
1
解决办法
11万
查看次数

如何在不关闭终端的情况下终止在终端中运行的脚本(Ctrl + C 不起作用)?

我编写了一个 bash 脚本,它调用其他几个程序并执行一堆命令。我从终端运行这个脚本。现在我想杀死脚本。

Ctrl + C有时按下并不会切断它,我认为是因为有时脚本正在执行另一个程序,并且出于某种原因终止信号不起作用。

但是,如果我关闭终端窗口,它会杀死脚本。

有什么我可以做的(键盘组合),类似于关闭终端窗口,而不实际关闭终端窗口(我不想丢失命令历史记录、当前目录、输出历史记录等)?

bash scripts

45
推荐指数
2
解决办法
34万
查看次数

为什么启动时不执行/etc/rc.local中的命令?

我的/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)

server startup boot scripts tt-rss

44
推荐指数
5
解决办法
19万
查看次数

/dev/null 在 shell 脚本中是什么意思?

我已经开始使用本指南学习 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仍包含所有文件。

filesystem command-line bash scripts

44
推荐指数
4
解决办法
14万
查看次数

“。”之间有区别吗?毕竟,bash 中的“源”?

我正在寻找“。”之间的区别。和“源”内置命令和一些源(例如,在讨论中,以及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)]

bash scripts environment-variables environment

42
推荐指数
2
解决办法
5万
查看次数