Vim启动项目文件-bash脚本
该程序应打开3个vim终端,每个终端中打开3个文件。我在每个子文件夹中都有一个startup.txt文件,其中包含我要启动的每个文件的名称。(每行一个名字) 需要修复的问题:Vim启动项目文件-bash脚本,bash,shell,vim,Bash,Shell,Vim,该程序应打开3个vim终端,每个终端中打开3个文件。我在每个子文件夹中都有一个startup.txt文件,其中包含我要启动的每个文件的名称。(每行一个名字) 需要修复的问题: 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=$AD
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
file1.cpp
file2.hpp
file3.hpp
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
如何使第22行上的命令可执行?当我尝试运行此命令时,它会给我以下错误(但它会在每个startup.txt中打开第一个文件)
错误:
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
file1.cpp
file2.hpp
file3.hpp
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
/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
file1.cpp
file2.hpp
file3.hpp
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
示例startup.txt:
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
file1.cpp
file2.hpp
file3.hpp
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
请注意,我是bash脚本的初学者。如有任何一般性建议,将不胜感激 我不确定您想用
vim
做什么,因为我没有使用那种语法,但这里有一些提示
您的getline()
函数可以很容易地替换为一个简单的sed
命令。如果文件
包含:
line 1
line 2
line 3
尝试运行:
sed '2!d' file
您将看到它删除除第2行以外的所有行。因此,您的vim
命令开始如下所示:
vim -c vsp $i/$(sed '2!d' $i)
for i in "file1" "file2" "file3" ; do
xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done
如果需要三个xterm
s,则需要启动三个,并告诉每个人执行一个新的vim
。如果希望它们同时运行,则需要在最后使用&
作为背景。这意味着您的脚本开始如下所示:
vim -c vsp $i/$(sed '2!d' $i)
for i in "file1" "file2" "file3" ; do
xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done
我不确定您正试图用
vim
做什么,因为我没有使用该语法,但这里有一些提示
您的getline()
函数可以很容易地替换为一个简单的sed
命令。如果文件
包含:
line 1
line 2
line 3
尝试运行:
sed '2!d' file
您将看到它删除除第2行以外的所有行。因此,您的vim
命令开始如下所示:
vim -c vsp $i/$(sed '2!d' $i)
for i in "file1" "file2" "file3" ; do
xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done
如果需要三个xterm
s,则需要启动三个,并告诉每个人执行一个新的vim
。如果希望它们同时运行,则需要在最后使用&
作为背景。这意味着您的脚本开始如下所示:
vim -c vsp $i/$(sed '2!d' $i)
for i in "file1" "file2" "file3" ; do
xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done
工作代码:
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
file1.cpp
file2.hpp
file3.hpp
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感谢你们所有的帮助
附:我已经多次编辑我的问题 工作代码:
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
file1.cpp
file2.hpp
file3.hpp
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感谢你们所有的帮助
附:我已经多次编辑我的问题 您可能需要对3个终端执行三次
xterm-e“vi something”&
。您以前有vim-c
,现在-c
已经消失了。另外,在gnome terminal
行的末尾需要&
-c“vsp$i/$(getFile 2$i)”我应该把“&”放在哪里?“&”的作用是什么?&
从gnome terminal
开始在行的末尾,这样终端在后台运行,第二个可以在第一个退出之前启动,即三个终端并行运行。要调试脚本,请尝试运行bash-xv yourScript
,您可能需要xterm-e“vi something”&
为3个终端执行了三次。您以前有vim-c
,现在-c
已经消失了。此外,您需要&
在gnome终端
行的末尾。c仍然在那里,但在引号之外。-c“vsp$i/$(getFile 2$i)“我应该把“&”放在哪里?”&“do?&
位于从gnome terminal
开始的行的末尾,这样终端可以在后台运行,第二个可以在第一个退出之前启动,即三个终端并行运行。要调试脚本,请尝试运行bash-xv yourScript
,我希望它更直观,这就是我制作函数的原因(+我学会了如何制作函数:D)。现在我的代码面临着不同的问题。我会更新上面的问题,所以请再次检查:我希望它更直观,这就是为什么我做了函数(+我学会了如何做函数:D)。现在我的代码面临着不同的问题。我会更新上面的问题,所以请再次检查:D