该程序应打开3个vim终端,每个终端打开3个文件。我在每个子文件夹中都有一个startup.txt文件,其中包含我要启动的每个文件的名称。 (每行一个名字)
需要解决的问题:
如何使第22行的命令可执行?当我尝试运行此命令时,它会给我以下错误(它会打开每个startup.txt中的第一个文件)
错误:
/ home / george / bin / project:第17行:找不到vsp:命令
/ home / george / bin / project:第19行:找不到vsp:命令
/ home / george / bin / project:第17行:找不到vsp:命令
/ home / george / bin / project:第19行:找不到vsp:命令
更新代码:
1 #!/bin/bash
2
3 ADDR_FILE=~/Documents/CEDA #address to the file
4 ADDR_CEDA=$ADDR_FILE/ceda_lib #address for ceda_lib
5 ADDR_GENERAL=$ADDR_FILE/general #address for general
6 ADDR_CLI=$ADDR_FILE/CLI #address for CLI
7
8 function getFile
9 {
10 awk 'NR=='$1 $2/startup.txt
11 }
12
13 for i in $ADDR_CEDA $ADDR_GENERAL $ADDR_CLI; do
14 CMD_2=""
15 CMD_3=""
16 if [ $(getFile 2 $i) ]; then #checks if line 2 isn't blank
17 CMD_2=-c "vsp $i/$(getFile 2 $i)"
18 if [ $(getFile 3 $i) ]; then #checks if line 3 isn't blank
19 CMD_3=-c "vsp $i/$(getFile 3 $i)"
20 fi
21 fi
22 gnome-terminal -e "vim $i/$(getFile 1 $i) $CMD_2 $CMD_3"
23 done
示例startup.txt:
file1.cpp
file2.hpp
file3.hpp
请注意我是bash脚本的初学者。任何一般性建议都将不胜感激。
答案 0 :(得分:3)
我不确定你要使用vim
完成什么,因为我没有使用该语法,但这里有一些提示。
您可以使用简单的getline()
命令轻松替换sed
函数。如果file
包含:
line 1
line 2
line 3
尝试跑步:
sed '2!d' file
并且您将看到它删除除第2行以外的所有行。因此,您的vim
命令开始如下所示:
vim -c vsp $i/$(sed '2!d' $i)
如果你想要三个xterm
,你需要开始三个,并告诉每个人执行一个新的vim
。如果您希望它们一次全部运行,则需要在最后使用&
对它们进行背景。这意味着您的脚本开始如下所示:
for i in "file1" "file2" "file3" ; do
xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done
答案 1 :(得分:1)
工作代码:
1 #!/bin/bash
2
3 ADDR_FILE=~/Documents/CEDA #address to the file
4 ADDR_CEDA=$ADDR_FILE/ceda_lib #address for ceda_lib
5 ADDR_GENERAL=$ADDR_FILE/general #address for general
6 ADDR_CLI=$ADDR_FILE/CLI #address for CLI
7 ADDRESSES="$ADDR_CEDA $ADDR_GENERAL $ADDR_CLI"
8
9 if [ $1 ]; then #checks for parameters
10 if [ $1 = "-f" ] || [ $1 = "--files" ]; then
11 for i in $ADDRESSES; do
12 nautilus $i &
13 done
14 exit 0 #end script
15 fi
16 fi
17
18 function getFile
19 {
20 awk 'NR=='$1 $2/startup.txt
21 }
22
23 for i in $ADDRESSES; do
24 CMD_2=""
25 CMD_3=""
26 if [ $(getFile 2 $i) ]; then #checks if line 2 isn't blank
27 CMD_2="-c \"vsp $i/$(getFile 2 $i)\""
28 if [ $(getFile 3 $i) ]; then #checks if line 3 isn't blank
29 CMD_3="-c \"vsp $i/$(getFile 3 $i)\""
30 fi
31 fi
32 gnome-terminal -e "vim $i/$(getFile 1 $i) $CMD_2 $CMD_3"
33 done
随着时间的推移,我会添加更多内容,但它只是我希望它做的最低限度:D谢谢你所有的帮助!
PS:我已经编辑过很多次了。