标签: shell-script

Windows 资源管理器的自定义多项目上下文菜单条目

我正在尝试为 Windows (7) 资源管理器创建一个自定义上下文菜单条目,它将通过一个命令发送所有选定的项目。

我在MSDN 文档中读到过关于MultiSelectModelPlayer的内容,但这似乎不起作用。这就是我尝试过的:

  1. 在 HKEY_CLASSES_ROOT/*/shell 下创建了一个键“MYVERB”
    1. (默认)“myverb”是“my verb”
  2. 在“MYVERB”下创建了一个键“COMMAND”
    1. “命令”的(默认)是“python C:\MyScript.py "%1" "%2" "%3" "%4" "%5"'

这对于一件物品来说效果很好。

但是,当选择了许多项目时,将为每个项目启动一次脚本。相反,我希望只有一个实例来接收所有选定的项目。

我尝试在“MYVERB”和“COMMAND”下添加字符串值“MultiSelectModel”->“Player”,但行为没有改变。

我想要做的事情是否仅通过脚本和注册表就可以实现?我究竟做错了什么?

windows windows-explorer context-menu shell-script desktop-customization

6
推荐指数
1
解决办法
2671
查看次数

处理以前未处理过的文件夹中的文件

我在目录中有一系列文件,我需要使用脚本执行操作。操作完成后,我想保留文件已处理的日志,以便下次运行脚本时,它不会再次尝试执行操作。

所以可以说我可以找到所有应该像这样处理的文件:

for i in `find /logfolder -name '20*.log'` ; do
    process_log $i
    echo $i >> processedlogsfile
done
Run Code Online (Sandbox Code Playgroud)

所以我有一个包含我处理过的日志的文件,我的目标是修改 for 循环,这样这些处理过的日志就不会被第二次处理。

每次手动扫描似乎效率低下,尤其是当处理的日志文件变大时:

 if grep -iq "$i" processdlogfiles ; then continue; fi
Run Code Online (Sandbox Code Playgroud)

如果在设置 for 循环时可以排除这些文件,那就太好了。

请注意,有问题的操作系统是 linux 衍生产品,一个管理设备,具有有限的工具集(attr例如没有命令),因此无法安装其他实用程序(这是可能的,但不是一个选项)。不过,大多数常见的 bash shell 命令都可用。

此外,已处理文件的文件名和位置必须保持原样 - 不能更改它们以反映其处理状态

unix shell-script bash-scripting

6
推荐指数
1
解决办法
110
查看次数

tmux - 在 bash 脚本中获取另一个窗格的密码?

有没有办法从 tmux 会话中找出有关任何窗格的当前工作目录的信息?

我想编写一个 bash 脚本,将当前窗格的目录更改为另一个窗格的目录,即使该窗格中已经运行了一个程序或脚本。

我想做的方法是导航到窗格 1,然后转到窗格 2,按一个热键,窗格 2 现在将更改为与窗格 1 相同的密码。

zsh shell-script tmux bash-scripting

6
推荐指数
1
解决办法
1692
查看次数

从 wget --content-disposition 获取文件名

在 bash 脚本内部,我动态下载一个文件,因此我用它wget --content-disposition来确保文件名正确,但是我将如何检索wget保存它的文件的名称?

bash wget shell-script

6
推荐指数
1
解决办法
8813
查看次数

将多行输入(此处为文档)提供给 cmd.exe 脚本中的命令

在 Bash 中,我可以做这样的事情

somecmd << END
a lot of 
text here
END
Run Code Online (Sandbox Code Playgroud)

直接从脚本向命令提供输入。我需要在 CMD.exe 批处理文件(.cmd 脚本)中做同样的事情。是否可以?

shell-script stdin cmd.exe

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

在 /f 中转义“=”(等号)

我正在尝试在 Windows 的 shell 中的“FOR /F”中运行以下命令...

wmic process where ParentProcessId=%%PID%% get ProcessId

=ParentProcessId和PID%%的保持gettings替换一个空格。

结果是:

for /F "usebackq" %b in (wmic process where ParentProcessId %PID% get ProcessId) do (.

我将如何转义此字符 = 符号?

windows shell-script escape-characters cmd.exe

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

“其他”手指(/etc/passwd 中的 GECOS 字段)

在文件中/etc/passwd我们有所谓的GECOS fields(代表“通用电气综合操作系统”),即:

username:password:userid:groupid:gecos:home-dir:shell 
Run Code Online (Sandbox Code Playgroud)

其中GECOS分为:

:FullName,RoomAddress,WorkPhone,HomePhone,Others:
Run Code Online (Sandbox Code Playgroud)

并被Others分成任意多的逗号:

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
Run Code Online (Sandbox Code Playgroud)

man chfn页面中可以阅读:

另一个字段用于存储其他应用程序使用的记帐信息。

现在,应用程序开发人员(我很感兴趣C languagesystem calls和/或bash script),这就是抓住这个信息的最佳方式?

仅考虑Bash环境,鉴于该finger命令无法显示others字段(或者至少我不知道如何显示),还有哪些其他命令可以显示?我知道这chfn不仅是展示,而且是允许它们被改变。如果只是将它输出到stdout怎么办?

linux bash shell-script c finger

6
推荐指数
1
解决办法
9577
查看次数

从一个 shell 脚本导入另一个 shell 脚本中的变量而不执行引用的 shell 脚本

我有 2 个 shell 脚本,file1.sh 和 file2.sh

文件1.sh

#!/usr/bin/env bash 
export var1="/data/share"
export var2='password'
echo "Hello"
Run Code Online (Sandbox Code Playgroud)

文件2.sh

#!/usr/bin/env bash 
source file1.sh
echo $var1
echo $var2
Run Code Online (Sandbox Code Playgroud)

当我执行 file2.sh 时,我得到以下输出

Hello
/data/share
password
Run Code Online (Sandbox Code Playgroud)

但我的预期输出是

/data/share
password
Run Code Online (Sandbox Code Playgroud)

file1.sh 在 file2.sh 中引用时被执行。如何在 file2.sh 中单独导入变量而不执行 file1.sh?

linux bash shell command-line shell-script

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

在 ZSH 中使用数组

我有以下声明:

TOKENARRAY=($TOKEN)
Run Code Online (Sandbox Code Playgroud)

$TOKEN 是一个数值变量。

如果我试试这个:

echo ${TOKENARRAY[0]}
Run Code Online (Sandbox Code Playgroud)

它向我显示了一个空字符串。

如果我做:

echo ${TOKENARRAY:0}
Run Code Online (Sandbox Code Playgroud)

它向我展示了令牌

但真正奇怪的是,如果我这样做:

echo ${TOKENARRAY[1]}
Run Code Online (Sandbox Code Playgroud)

它向我展示了令牌。

这里发生了什么?这个脚本应该在 bash 中工作,但它在 zsh 中不起作用。

zsh shell-script

6
推荐指数
1
解决办法
8224
查看次数

如何清除shell脚本发送的通知

在我的脚本中,我向用户发送通知并提示他输入一些数据。之后我想清除之前发送的通知。通知应保留在托盘中,直到用户输入数据。

目前我正在使用notify-send,但只能通过超时才能清除。

我想要的是这样的:

send-notification --title="Hey, enter some data pls" --id=999
prompt-to-enter-data
delete-notification --id=999
Run Code Online (Sandbox Code Playgroud)

我正在使用 linux Mint 20。带有 cinnamon DE (v4.6.6)。

notify-osd未安装。

linux notifications shell-script cinnamon

6
推荐指数
1
解决办法
1848
查看次数