标签: script

如何在 shell 脚本函数完成时始终执行命令?

我需要编写一个zsh具有多个退出点的函数,并在每个退出点处执行相同的清理命令:

function foo {
    if ... ; then
        ...
        run_cleanup
        return
    elif ... ; then
        some_command || (run_cleanup ; return 1)
    else
        ...
    fi
    ...
    run_cleanup
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免run_cleanup在每个退出点重复(这很容易出错)?

linux script bash zsh shell-script

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

使用 Powershell 下载 Google Chrome

是否可以使用 Powershell 下载最新版本的 Google Chrome。我是一名 IT 管理员,正在为我们的现场技术人员编写一个脚本。自从将我们的客户端计算机升级到 Windows 10 21H2 LTSC 后,用于下载 .msi 并安装它的当前脚本不再起作用。谷歌似乎改变了现在下载和安装的方式。

script powershell google-chrome installation

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

在 Linux 中连接到无线网络时运行脚本

当我连接到无线网络时,是否可以运行脚本?

当您第一次连接时,我的大学会劫持所有 HTTP(S) 连接,以强制您使用大学帐户登录。我已经编写了一个脚本来处理登录,但是我希望它在我连接到网络时自动运行。

linux script wireless-networking

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

在 Mac OS X 的 TextWrangler 中,如何使用键盘快捷键将所选文本更改为小写?

我知道如何使用菜单来更改大小写,但我希望它成为键盘快捷键。其他文本编辑器具有此功能,但我更愿意坚持使用 TextWrangler。

一个已经存在还是有另一种方式,例如首选项设置或现有的Applescript?

script keyboard-shortcuts text-editors textwrangler macos

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

如何使用 crontab 以无人身份运行脚本

这是在 CentOS 机器上。我试图在每天的某个时间以用户 nobody(或以最小权限的用户身份)运行脚本。这里没有人:

[root@CentOS % ~] grep "^nobody" /etc/passwd  
nobody:x:99:99:Nobody:/:/sbin/nologin  
Run Code Online (Sandbox Code Playgroud)

这是我在 root 的 crontab 中尝试过的:

设置环境变量 SUDO_USER=nobody
15 17 * * * sudo -u nobody /bin/bash /usr/local/bin/bashscript.sh
15 17 * * * su -c /usr/local/bin/bashscript.sh nobody

如果可能的话,我想将 crontab 条目保留在 root 的 crontab 中。我也不想欺骗用户nobody的帐户,因为我不想破坏可能依赖于这些设置的任何其他内容。如果这是症结所在,我并不反对创建另一个非特权帐户并给他们一个真正的外壳。

我也承认有点困惑。我认为这将是一个日常问题,除了我在 google-fu 中的棕色腰带没有太大帮助。

centos script cron crontab

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

如何阻止 bash 打印警报?

kill -9 $PID &>/dev/null在脚本中杀死进程时,在下一个命令终止后仍会向终端打印一条消息。你如何阻止这种行为?

例如

while true; do
    /usr/bin/dostuff -a -b -c
    PID=$(pidof -o %PPID /usr/bin/dostuff)
    sleep 1; 
    kill -KILL $PID &>/dev/null
    echo "hello"
done
Run Code Online (Sandbox Code Playgroud)

会打印类似的东西

hello
./my-cript.sh: line 12:  7134 Killed
/usr/bin/dostuff -a -b -c
Run Code Online (Sandbox Code Playgroud)

当我只想打印“你好”时

编辑: 干净的解决方案是在子shell中运行程序,或者否认它。

#SOLUTION
while true; do
    /usr/bin/dostuff -a -b -c &
    disown
    PID=$!
    sleep 1; 
    kill -KILL $PID &>/dev/null
    echo "hello"
done
Run Code Online (Sandbox Code Playgroud)

linux unix script bash process

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

sudo 在 bash 脚本中显示输入的密码

我有一个使用sudo了几次的 bash 脚本。不过,它有一些奇怪的地方。

  1. 在我为上一个命令输入密码后,它会在几秒钟内询问我的密码。
  2. 我第二次输入密码时,它会回显到显示屏上。

这是脚本的相关部分。

sudo service apache2 stop
drush sql-dump --root="$SITE_DIR" --structure-tables-key=svn --ordered-dump | grep -iv 'dump completed on' | sudo tee "$DB_DIR/${SITE_NAME}.sql" > /dev/null
sudo svn diff "$DB_DIR" | less
sudo svn commit -m "$MESSAGE" "$DB_DIR"
sudo service apache2 start
Run Code Online (Sandbox Code Playgroud)

第一个密码是停止apache,它按预期工作。如前所述,sudo tee它不“记得”我有提升的权限,再次要求输入密码,然后将其回显到屏幕上。鉴于这完全tee是关于回显到屏幕,我已经使用了一些简单的脚本,这些脚本具有| sudo tee,并且它们都按预期工作。

编辑: 我查看了drush命令本身,它是一个 bash 文件,它使用exec. 这听起来可能有潜力 - 有什么想法吗?这是来自drush.

exec php $SCRIPT_PATH --php=`which php` "$@"
Run Code Online (Sandbox Code Playgroud)

Edit2: 正在查找与 Ruby 脚本有关的内容,并 …

script sudo bash

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

用于更改显示分辨率的 Mac OS X 脚本

是否可以在 Mac OS X 中更改显示分辨率?

如果是这样,如何?

script resolution osx-snow-leopard

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

强制 bash 脚本运行完成,某些项目可能会粘住

我有一个正在构建的 Uni 作业,我需要使用多个不同的参数多次运行以检查运行时间。目前我有一个简单的 bash 脚本,它看起来有点像下面的 - 它记录了它在做什么以及time每个测试的结果,所有正常输出都被丢弃(我正在其他地方检查正确性,别担心)。

问题是有时(而且相当罕见)master进程会卡住并且永远不会终止,这显然会妨碍完成测试运行。我正在努力解决这个问题,显然,但算法很好,所以我仍然想继续测试,因为有一个交接日期。

所以,我想要某种方式来指定进程的最大运行时间,如果它们超过了,我希望它们自动终止(最好通过SIGINT,或其他一些识别信号),然后脚本继续下一个条目。或具有相同结果的任何合适的替代方案。

建议?

我目前拥有的片段:

#!/bin/bash

echo "starting tests: clearing output file" > log

echo "running single tests" >> log

echo " starting 16" >> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log

#etc

echo "running multi tests" >> log

echo " starting 16 1 1 1" >> log
time …
Run Code Online (Sandbox Code Playgroud)

script bash

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

在脚本中更改 NIC 速度/双工设置?

我有一台运行 Windows Server 2003 SP2 并安装了 PowerShell 的笔记本电脑。

有时,该系统必须在需要将 NIC 手动设置为 100 Mbps/全双工才能正常运行的环境中使用。在大多数其他环境中,这需要设置为自动检测以获得最佳性能。

通常,我通过以下程序执行此操作:

  • 右键单击网上邻居,选择属性。
  • 右键单击本地连接,选择属性
  • 单击配置
  • 在 Advanced 选项卡上,选择 Speed & Duplex 属性并将值从 Auto 更改为 100 Mb Full。
  • 完成工作后撤消更改。

有没有办法通过 Batch 或 PowerShell 脚本来做到这一点?我正在做这样的事情:

@ECHO OFF
[Insert 100 Mbps/Full Duplex commands here]
ECHO NIC set to 100 Mbps/Full Duplex
ECHO Press any key to return to Auto-Detect
PAUSE
[Insert Auto-Detect commands here]
ECHO NIC returned to Auto-Detect
ECHO Press any key to exit
PAUSE

有人告诉我,可能有一些方法可以通过 WMIC 或 PowerShell 执行此操作,但我一直无法找到正确的开关、值或语法。

windows script powershell batch

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