我需要编写一个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在每个退出点重复(这很容易出错)?
是否可以使用 Powershell 下载最新版本的 Google Chrome。我是一名 IT 管理员,正在为我们的现场技术人员编写一个脚本。自从将我们的客户端计算机升级到 Windows 10 21H2 LTSC 后,用于下载 .msi 并安装它的当前脚本不再起作用。谷歌似乎改变了现在下载和安装的方式。
当我连接到无线网络时,是否可以运行脚本?
当您第一次连接时,我的大学会劫持所有 HTTP(S) 连接,以强制您使用大学帐户登录。我已经编写了一个脚本来处理登录,但是我希望它在我连接到网络时自动运行。
我知道如何使用菜单来更改大小写,但我希望它成为键盘快捷键。其他文本编辑器具有此功能,但我更愿意坚持使用 TextWrangler。
一个已经存在还是有另一种方式,例如首选项设置或现有的Applescript?
这是在 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 中的棕色腰带没有太大帮助。
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) 我有一个使用sudo了几次的 bash 脚本。不过,它有一些奇怪的地方。
这是脚本的相关部分。
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 脚本有关的内容,并 …
是否可以在 Mac OS X 中更改显示分辨率?
如果是这样,如何?
我有一个正在构建的 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) 我有一台运行 Windows Server 2003 SP2 并安装了 PowerShell 的笔记本电脑。
有时,该系统必须在需要将 NIC 手动设置为 100 Mbps/全双工才能正常运行的环境中使用。在大多数其他环境中,这需要设置为自动检测以获得最佳性能。
通常,我通过以下程序执行此操作:
有没有办法通过 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 执行此操作,但我一直无法找到正确的开关、值或语法。
script ×10
bash ×4
linux ×3
powershell ×2
batch ×1
centos ×1
cron ×1
crontab ×1
installation ×1
macos ×1
process ×1
resolution ×1
shell-script ×1
sudo ×1
text-editors ×1
textwrangler ×1
unix ×1
windows ×1
zsh ×1