标签: scripts

无需运行脚本即可知道shell脚本是否包含语法错误

我有一个包含很多条件的很长的 shell 脚本,我想知道脚本中是否有任何语法错误而不运行它。

由于解释了 shell 脚本,我认为这是不可能的,但是有没有办法通过使用一些技巧来知道。

scripts

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

为什么将脚本放在 /etc/cron.hourly 中不起作用?

我在 中放入了一个可执行脚本/etc/cron.hourly,但该脚本并不是每小时运行一次,实际上它根本没有运行。

这是我制作的脚本(小时声音):

#!/bin/bash
mplayer ~/Music/sfx_msg-highlight.wv &> /dev/null &
spd-say -r -50 -p 50 -t male3 "现在是 $(date +"%l %p")"
通知发送“它是:”“$(date +"%l %p") 现在。-i ~/Pictures/"first tee.png" -t 5000

我的 crontab 是:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh
Run Code Online (Sandbox Code Playgroud)

虽然mplayer和spd-say命令运行正确,但notify-send不是。我还尝试将错误重定向到文件:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Run Code Online (Sandbox Code Playgroud)

但这显示没有输出。我究竟做错了什么?

scripts cron

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

运行 bash 脚本后退出终端

我正在尝试编写一个bash脚本来使用该gnome-open命令打开某些文件(主要是 pdf 文件)。我还希望终端在打开 pdf 文件后退出。

我曾尝试添加exit到我的脚本的末尾,但这并没有关闭终端。我确实尝试在网上搜索我的问题的答案,但找不到任何合适的答案,如果你们能提供帮助,我将不胜感激。

我需要一个只杀死我运行命令的终端而不是所有终端的答案,这可能吗?我接受的上一个答案会杀死所有打开的终端窗口。直到今天我才意识到情况是这样。

command-line bash scripts

21
推荐指数
3
解决办法
12万
查看次数

如何在需要 sudo 的 bash 脚本中只输入一次密码

数据

  • 我希望这台机器上的操作员用户挂载自己的 cifs 共享
  • 该sudoers文件已包含/bin/mount -t cifs //*/* /media/* -o username=*所有操作员的命令
  • 我希望用户cifs通过只输入一次密码的脚本安装共享,而不是两次。
  • sudo 密码和 cifs 密码相同。

我已经拥有的

此脚本有效:

#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
Run Code Online (Sandbox Code Playgroud)

...但它要求用户输入两次相同的密码!

  • 一次为 sudo
  • 一次用于安装本身

这也可以:

#!/bin/bash
echo -n Password: 
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
Run Code Online (Sandbox Code Playgroud)

...但这需要我允许所有运营商用户能够sudo sh(主要安全问题)

题

如何安装CIFS共享在bash ¹没有把sh中sudoers的文件,也没有建立一个永久/临时文件???

注 1:没有 …

bash sudo scripts

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

升级到 16.04 LTS 后 rc.local 不执行命令

在之前安装的 kubuntu 15.xx 版本中,我添加了一行/etc/rc.local-/home/diet/scripts/my-auto-mount-script这显然是指一个脚本,如果在家庭 wifi 网络驱动器上应该安装。

这在 kubuntu 15.xx 上完美无缺

升级后,它似乎/etc/rc.local在启动时被忽略,因为运行该命令/etc/rc.local似乎仍然可以解决问题。我认为 rc.local 被忽略的原因是因为它引用的脚本应该在脚本成功和脚本失败时生成日志,但没有日志。

谁能给我一些有关如何解决此问题的指示?

PS:是的,我知道放入东西/etc/fstab也是安装驱动器的一种方式,但是当我不在家时,我讨厌我可以看到海豚上的驱动器并且上面有那些小红叉,因为它们不在那里. 这样当我在路上(它是一台笔记本电脑)时,人们看不到我家里的东西。

scripts kubuntu 16.04

21
推荐指数
1
解决办法
4万
查看次数

sed 替换文件中的特定行

我正在为我的虚拟机构建一个 bash 脚本,我想知道如何替换本文档中的特定行:

[base]

## uncomment and set autologin username to enable autologin
# autologin=dgod

## uncomment and set timeout to enable timeout autologin,

## the value should >=5

# timeout=10

## default session or desktop used when no systemwide config

# session=/usr/bin/startlxde
Run Code Online (Sandbox Code Playgroud)

这一行:

# autologin=dgod
Run Code Online (Sandbox Code Playgroud)

我想改成这个

autologin=ubuntu
Run Code Online (Sandbox Code Playgroud)

我尝试过“tee”和“sed”,但无法使其工作。对于比我更经常使用 bash 脚本的人来说,这应该很容易。

command-line bash scripts sed

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

Python 3.8 脚本突然无法运行,但直接调用 Python 命令时运行正常

我完全感到困惑和迷惑。我一直很高兴地从终端编码和运行 Python 脚本(并且还运行 Python 解释器)。我上床睡觉是一个快乐的 Python 用户,但突然间我无法从 shell 运行任何 Python 脚本。

hello.py 包含:

#!/usr/bin/python3
print('Hello world!')
Run Code Online (Sandbox Code Playgroud)

然而突然:

% ./hello.py
./hello.py: 1: #!/usr/bin/python3: not found
./hello.py: 2: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)

但

% python3 hello.py 
Hello world!
% python hello.py 
Hello world!
Run Code Online (Sandbox Code Playgroud)

什么。这。扎金。远行者。


ls -la hello.py 显示:

-rwxrwxr-x 1 Lexible Lexible    44 May 25 08:35  hello.py
Run Code Online (Sandbox Code Playgroud)

@Kulfy 每两次请求

% file -k hello.py 
hello.py: Python script text executable\012- a /usr/bin/python3 script, UTF-8 Unicode (with BOM) text executable

% …
Run Code Online (Sandbox Code Playgroud)

scripts python3

21
推荐指数
2
解决办法
8340
查看次数

如何远程查找 Ubuntu 机器的版本?

我有超过 60 到 80 个运行 Ubuntu 的系统。其中一些是 8.04 版本,一些是最新版本 10.10。现在我们正在将所有旧的 Ubuntu 版本升级到新版本。很难打开每个 Ubuntu 系统并记录旧的 Ubuntu 版本然后升级。我在一个文本文件中拥有所有这些机器的 IP 地址。所以我正在寻找一个简单的 bash 脚本来自动执行任务。我希望输出看起来像这样:

172.29.34.40 ubuntu 10.04
172.29.34.41 ubuntu 8.04
172.29.34.42 ubuntu 8.10

等等.. 谁能帮帮我?

bash scripts

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

使用 ~/.bash_login 在登录时运行脚本

当我在 Ubuntu 中登录和注销时,我需要运行一个脚本。

我试图将脚本放入我的~/.bash_login但它没有用。

有没有更好的位置可以运行我的脚本?

我的脚本位于/home/gsd/script/login.sh并且它是可执行的。

编辑:

我的脚本在我输入时运行:/home/gsd/script/login.sh并设置为 +x

现在,我只有:touch /home/gsd/test.txt在~/.bash_login测试。

从未创建文件 test.txt

编辑2:

gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd    29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd   220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd  3136 2011-11-04 08:00 .bashrc
Run Code Online (Sandbox Code Playgroud)

scripts login logout

20
推荐指数
3
解决办法
9万
查看次数

当脚本在第一行中有 `#!/usr/bin/env python` 时,什么会导致它无法找到 python?

试图让 casperjs 在 Ubuntu 12.04 上运行。在我运行时安装它后,我得到:

09:20 $ ll /usr/local/bin/casperjs
lrwxrwxrwx 1 root root 26 Nov  6 16:49 /usr/local/bin/casperjs -> /opt/casperjs/bin/casperjs

09:20 $ /usr/bin/env python --version
Python 2.7.3

09:20 $ cat /opt/casperjs/bin/casperjs | head -4 
#!/usr/bin/env python

import os
import sys

09:20 $ casperjs
: No such file or directory

09: 22 $ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Run Code Online (Sandbox Code Playgroud)

所以 Python 存在且可运行,casperjs 指向正确的位置,它是一个 Python 脚本。但是当我运行它时,我得到“没有这样的文件”。

我可以通过更改 casperjs python 文件的第一行来修复它:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

到:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

结果: …

python bash scripts

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

标签 统计

scripts ×10

bash ×5

command-line ×2

16.04 ×1

cron ×1

kubuntu ×1

login ×1

logout ×1

python ×1

python3 ×1

sed ×1

sudo ×1