我是新手……我需要一个脚本,它接收一个目录作为参数并打印 15 到 50 行之间的文件的名称,但我不知道如何使用-sentence 中的wc输出if:
#!/bin/bash
for f in `ls`; do
echo "File -> $f"
cat $f | wc -l
done
Run Code Online (Sandbox Code Playgroud)
我如何接收参数?以及如何将wc输出分配给变量?
我正在尝试在本地向全局$PATH变量添加一个目录。我将以下内容添加到我的.bashrc.
export PATH=$PATH:$VRS/bin
Run Code Online (Sandbox Code Playgroud)
但PATH似乎每次我打开一个外壳时都会一遍又一遍地连接到自身(即PATH不断增长)。有任何想法吗?
一个目录的内容:
$ ls -l
total 122639
-rw-r--r-- 1 125578080 Aug 20 17:47 - Diana Krall, Stan Getz & Oscar Peterson.7z
drwxr-xr-x 4 4096 Aug 20 18:02 Java
Run Code Online (Sandbox Code Playgroud)
我想用file这个目录下的命令,里面复制了很多各种文件
$ file *
Run Code Online (Sandbox Code Playgroud)
我期望的结果:
$ file *
- Diana Krall, Stan Getz & Oscar Peterson.7z: 7-zip archive data, version 0.3
java: directory
Run Code Online (Sandbox Code Playgroud)
我得到的结果:
$ file *
file: illegal option --
file: illegal option -- D
file: illegal option -- a
file: illegal option -- a
file: illegal option --
file: …Run Code Online (Sandbox Code Playgroud) 我经常在晚上回家之前让我的工作计算机运行一些耗时的计算。完成后,我希望它关闭。但是,由于关闭需要 root 权限,因此必须使用sudo执行。显然,7 小时后我没有在那里输入我的密码,到目前为止,我不得不以 root 身份执行整个命令列表(cmd1;cmd2;cmd3;...shutdown)——这并不理想。
有没有办法可以在命令列表的末尾“预授权”sudo?以某种方式我可以在执行开始时完成我的密码,这样 bash 以后就不需要我了?
谢谢!
我的 linux 机器上有一个奇怪的行为,我需要你的建议。我想捕获此命令的输出
ls -log /some/directory
Run Code Online (Sandbox Code Playgroud)
从命令行运行命令结果正常:
-rw-r--r--. 1 22650880 2013-09-09 12:02 file1.txt
-rwxr--r--. 1 20733952 2012-07-09 17:42 file2.txt
-rw-r--r--. 1 31596544 2013-09-09 23:42 file3.txt
-rw-r--r--. 1 15773696 2013-09-10 11:15 file4.txt
Run Code Online (Sandbox Code Playgroud)
所以我使用awk( ls -log /some/directory| awk '{print $6","$4" "$5}' | tr "\n" ";") 的最终结果:
file1.txt,2013-09-09 12:02;file2.txt,2012-07-09 17:42;...
Run Code Online (Sandbox Code Playgroud)
当我将ls命令放入 Bash 脚本时,我的问题出现了,因为日期已转换。结果是Sep 09 12:02而不是2013-09-10 11:15
如何在命令行输出中获取日期?
有没有办法以受控方式检测显示是否有效?例如,如果我设置了$DISPLAY=anydisplay或$DISPLAY=0.0,有没有办法检查我是否有权访问anydisplay或0.0是否是有效的显示?我正在编写一个旨在从 bash 脚本启动的程序,其想法是警告用户如果他们的显示无效并在“控制台”模式下运行该程序。
最近我改为lxdeon Ubuntu。切换后它改变了我x-terminal-emulator的lxterm。
我的脚本执行以下操作:
通过 for 循环并打开一个新的终端窗口,然后在该终端中运行脚本。它会同时打开多个终端,在所有不同的窗口中运行该脚本。
切换到lxde它后,它将循环并等待每个终端窗口在下一个终端窗口启动之前完成脚本。我希望它做它正在做的事情。
我通过改x-terminal-emulator回gnome-terminal. 现在它工作正常。然而,这是一个少数人使用的脚本系统,他们都使用不同的环境和终端模拟器。我如何确保这适用于所有不同的终端仿真器,或者至少适用于xterm每个人都会拥有的任何一个。
谢谢
代码片段:
for blah in something
do
x-terminal-emulator -e bash my_script.sh
done
Run Code Online (Sandbox Code Playgroud) 我的目标:下载 131 个 JPEG 并将它们保存为相对于日期/时间格式而不是文件名的文件名格式。
我已经尝试过在下载文件后更改文件名的方法。但是,这些方法不起作用,因为似乎没有保留 exif 数据。例如:jhead -n%Y%m%d-%H%M%S *.jpg只返回一堆错误说:
Possible new names for for '{filename}.jpg' already exist
File '{filename}.jpg' contains no exif date stamp. Using file date
Run Code Online (Sandbox Code Playgroud)
通常,在这种情况下,我最终得到的文件比开始时要少。
那么有什么我可以传递给的命令wget吗?我已经尝试过该--timestamp选项但没有成功。(手册页没有明确说明它的作用。)
我试图从stdata.txt 中删除第一列和第二列,从stdata1.txt 中删除第二列。
数据.txt :
1 a 10
2 b 20
3 c 30
Run Code Online (Sandbox Code Playgroud)
studata1.txt :
i si
co oi
me zi
Run Code Online (Sandbox Code Playgroud)
这是我的 bash 文件:
cut -d -f -2 studata.txt >tmp1
cut -d -f 2- studata1.txt > tmp2
paste tmp1 tmp2 > c.txt
cat c.txt
Run Code Online (Sandbox Code Playgroud)
错误:
cut: the delimiter must be a single character
Run Code Online (Sandbox Code Playgroud)