最新kali之sqsh

描述:

  交互式数据库外壳(2.5版)。
  Sqsh(发音为skwish)是SQshelL(发音为s-q-shell)的缩写,旨在替代Sybase提供的古老的“ isql”程序。 之所以出现这种情况,是因为多年来尝试使用从未打算执行实际工作的程序进行实际工作时感到沮丧。
  Sqsh不仅是一个不错的提示,它还旨在提供由良好的Shell提供的许多功能,例如变量,别名,重定向,管道,背景,作业控制,历史记录,命令替换和动态配置。 另外,作为设计的副产品,扩展和添加功能非常容易。

选项:

  以下选项可用于调整sqsh的某些行为,但是大部分配置选项仅可通过可在运行时设置的环境变量或通过.sqshrc文件使用。
  选项也可以在SQSH环境变量中提供。 此变量是在解析命令行之前解析的,因此在大多数情况下,命令行将覆盖变量的内容。 请注意,对于允许多次提供的选项(例如-c),在变量和命令行中同时提供它们与在命令行中多次提供选项相同。

-a count
	设置在sqsh中止之前可能发生的最大故障数(由$ thresh_fail变量确定)。 将此设置为0表示sqsh不应在错误时退出。 该值默认为0,也可以使用$ thresh_exit变量进行设置。 有关详细信息,请参见退出状态部分。

-A packetsize
	指定用于与SQL Server通信的网络TDS数据包的大小。 此值必须介于512和8192之间,并且是512的倍数。检查SQL Server配置以确定支持的数据包大小。 也可以在运行时使用$ packet_size变量指定此值。

-b 
	启动时禁止显示横幅消息。 如果stdout已重定向到文件,则没有必要。 也可以通过$ banner变量设置此选项。

-B
	关闭所有stdin,stdout和stderr的缓冲。 此功能允许从交互式控制脚本(如聊天和期望)运行sqsh。

-c [cmdend]
	在内部,sshsh提供命令\ go来将一批SQL发送到数据库,并提供一个别名(执行此命令)。 每次提供cmdend时,都会为\ go建立新的别名。

-C sql
	导致sql命令由sqsh执行,类似于-i标志所显示的相同行为。 此sql语句可能不包含双引号(在将来的sqsh版本中可能会取消此限制)。

-d sererity
	设置将显示给用户的最小SQL Server错误严重性。 默认值为0,有效范围为0到22。也可以使用$ thresh_display变量进行设置。 请参阅退出状态部分。

-D database
	使sqsh尝试以数据库上下文设置为database而不是默认数据库(通常是master)启动。 也可以使用$ database变量进行设置。

-e
	包括发出给sqsh的每个命令,这些命令将包含在输出中。 也可以通过$ echo变量(与\ echo命令无关)设置此选项。

-E editor
	将默认编辑器设置为editor。 也可以使用UNIX环境变量$ EDITOR将其设置为所需编辑器的名称。

-f sererity
	设置sqsh认为失败的最低严重性级别。 这与设置$ thresh_fail变量相同。 有关详细信息,请参见退出状态部分。

-G tds_version
	设置要使用的TDS版本。 有效版本为4.0、4.2、4.6、4.9.5、5.0,freetds还支持7.0和8.0版本。 指定的值分配给变量$ tds_version。 sqsh不执行输入验证。 但是,当指定了无效的TDS版本时,将使用默认版本5.0。 建立会话后,变量$ tds_version将设置为有效的TDS版本。 如果未使用选项-G,则该变量将不可用。 仅用于测试和调试目的。
	TDS代表表格数据流,是Sybase和Microsoft用于客户端-服务器通信的通信协议。

-h
	关闭列标题,并在批处理输出中尾随“((受影响的行数)”)。

-H hostname
	设置sysprocesses中报告的客户端主机名。 也可以通过$ hostname变量来设置。

-i filename
	从文件名而不是从stdin读取所有输入。

-I interfaces
	建立与数据库的连接后,将使用interfaces文件将$ DSQUERY的值转换为将要建立连接的主机名和端口,默认情况下,该文件位于$ SYBASE / interfaces中。 此标志允许覆盖此默认值。

-J charset
	指定在客户端与SQL Server通信时使用的字符集。 也可以使用$ charset环境变量进行设置。

-k keywords
	如果readline支持已编译到sqsh中,则指定一个文件,该文件包含用于关键字选项卡完成的关键字列表。 也可以通过$ keyword_file变量设置该文件,该变量默认为$ HOME / .sqsh_words。

-K keytab
	Kerberos支持。 指定DCE的密钥表文件名。
	有关详细信息,请参见下面的“ Kerberos支持”部分。

-l debug_flags
	如果已使用-DDEBUG编译sqsh,则可以使用此选项打开和关闭调试选项。 请参见下面的$ debug变量。

-L var=value
	将$ var的值设置为value。 即使提供了显式命令行变量来设置该值,也可以使用它来设置任何sqsh变量的值。 -L标志还可用于设置非配置变量的值。

-m style
	将当前显示样式更改为样式。 当前支持的样式为horiz,vert,bcp,csv,html,meta,pretty和none。 当前的显示样式也可以使用$ style变量或通过\ go命令的-m标志来设置。

-n on|off
	在连接上启用链接事务模式(如果设置为on)。 链接的事务模式也称为“自动提交关闭”模式。

-N appname
	设置应用程序名称sqsh用于向SQL Server标识自己。 可以使用master.dbo.sysprocesses表的program_name列从服务器检索应用程序名称。 默认为sqsh-2.1.7。

-o filename
	将所有输出重定向到文件名而不是stdout。

-p
	在每个SQL批处理完成时显示性能统计信息。 也可以通过$ statistics变量或向\ go命令提供-p标志来打开此选项。

-P [password | -]
	连接到服务器所需的用户名的Sybase密码(默认为NULL)。 密码也可以通过$ password设置。 提供密码“-”将导致从stdin的第一行读取密码。
	sqsh会竭力向试图查看用于启动sqsh的命令行的任何用户隐藏密码,因此,使用-P不应构成安全漏洞。 或者,您可以将默认密码存储在.sqshrc文件中,您自己以外的任何人都无法读取。 (chmod 600 .sqshrc)

-Q value
	查询超时值(相当于isql的-t选项)。 如果设置,将使长时间运行的查询超时。 映射到$ query_timeout变量。
	例如:
		sqsh -SASE1502 -Usa -P -Q30
           ASE1502.sa.master.1> cd tix
           ASE1502.sa.tix.1> select count(*) from E_TIX;
           Open Client Message
           Layer 1, Origin 2, Severity 2, Number 63
           ct_results(): user api layer: internal Client Library error:
                       Read from the server has timed out.
           ASE1502: Query or command timeout detected, command/batch cancelled
           ASE1502: The client connection has detected this 1 time(s).
	另请参见$ max_timeout变量,该变量控制会话中止之前当前连接上可能发生超时的次数。

-r [sqshrc]
	指定要处理的备用.sqshrc文件,而不是默认文件。 如果-r之后没有提供sqshrc,则不会处理任何初始化文件。 此标志必须是命令行上提供的第一个参数,所有其他实例将被忽略。

-R server_principal
	Kerberos支持:如果interfaces文件中的服务器名称与真实服务器名称不同,则指定用于网络(Kerberos)身份验证的服务器主体。
	有关详细信息,请参见下面的“ Kerberos支持”部分。

-s colsep
	使字符串colsep用于定界SQL列输出列,默认为“”。

-S server | host:port [:filter]
	要连接的Sybase服务器的名称或地址。 缺省值为外部环境变量$ DSQUERY。 如果-S或$ DSQUERY都未设置,则默认为“ SYBASE”。 也可以通过内部变量$ DSQUERY设置该值。 服务器名称必须存在于接口或sql.ini文件中。 或者,也可以将目标服务器指定为host:port [:filter],其中host也可以是IP地址。 请注意,可以在$ SYBASE / $ SYBASE_OCS / config / libtcl [64] .cfg中定义过滤器。 例如:
		[FILTERS]
        ssl=libsybfssl.so
        ssl64=libsybfssl64.so

-t [filter]
	通过外部程序,过滤器以及在发送给SQL Server之前启用命令批处理的过滤。 如果未提供filter,则使用$ filter_prog(默认为'm4-')。 也可以通过$ filter和$ filter_prog变量设置该值。

-T value
	指定登录超时(类似于isql的-l标志)。 如果设置,则指定sqsh在超时登录请求之前将等待的秒数。 映射到$ login_timeout变量。

-U username
	Sybase用户名,用于连接到数据库,默认为运行sqsh的用户的用户名。 用户名也可以通过$ username变量设置。

-v
	显示版本号,$ version并退出。

-V [bcdimoqru]
	Kerberos支持:指定要使用的安全性选项。
	有关详细信息,请参见下面的“ Kerberos支持”部分。

-w width
	显示结果集的最大输出宽度,默认为交互模式下的屏幕宽度。

-X
	使用客户端密码加密(如果支持)启动到服务器的登录连接。 如果SQL Server不能识别此选项,或者如果用于编译sqsh的CT-Lib版本不支持此选项,则它将被忽略。 也可以使用$ encryption环境变量来设置此选项。

-y directory
	指定要使用的SYBASE目录,而不是$ SYBASE的值,以便查找interfaces文件。

-z language
	指定替代语言以显示sqsh提示和消息。 没有-z标志,将使用服务器的默认语言。 也可以使用$ language变量进行设置。

-Z [secmech|default|none]
	Kerberos支持:指定要使用的安全性机制。
	有关详细信息,请参见下面的“ Kerberos支持”部分。

Args…
	如果使用-i标志运行sqsh时指定了要处理的输入文件(而不是启动交互式会话),则可以在命令行中提供参数以传递给输入文件。 可以使用变量$ {0},$ {1},...访问这些自变量(有关更多信息,请参见下面的“变量”部分)。

安装
	在启动时,sqsh将所有内部环境变量,命令和别名初始化为其默认值,然后在系统范围的配置文件/ etc / sqshrc中查找,然后在本地配置文件$ HOME / .sqshrc中查找(可能是 通过SQSHRC外部环境变量覆盖)。 如果找到此文件,则将其执行,就像脚本将使用-i标志一样。
	sqshrc文件可能包含通常可以在提示符下键入的任何内容,但是应注意,在读取该文件时,sqsh尚未建立与数据库的连接,但是大多数执行数据库活动的命令,例如 \ go在执行时将尝试建立数据库连接(必要时它还会提示您输入密码)。 同样,如果在此启动文件中需要数据库活动,则可以执行\ connect命令(请参见下面的COMMANDS)。
	执行完.sqshrc文件后,sqsh会解析任何命令行选项(因此,.sqshrc文件中设置的任何变量都可能被命令行选项覆盖)。 之后,如果sqsh以交互方式运行(即不使用-i并且stdin附加到tty),则它将查找$ history变量提供的文件,并将该文件的内容加载到历史记录缓冲区中。 (请参阅下面的缓冲区)。
	在建立与数据库的连接之前(在启动过程中,或者通过显式的\ connect或\ reconnect命令),将立即执行文件$ HOME / .sqsh_session。 可以使用$ session变量覆盖此文件的名称。

命令行
	由sqsh第一次读取一行时,第一个单词与该行分开。 然后,该词将扩展所有变量(请参见下文的变量替换),然后是命令扩展(请参见下文的命令替换)。 然后分析结果字符串的第一个单词,看它是否是有效的sqsh命令或别名。
	sqsh命令行遵循许多与Bourne shell相同的规则,从而允许文件重定向,流水线化,命令替换和通过相同语法进行背景处理。

注释
	任何以#开头,后跟非字母数字字符(0-9,az,AZ和_以外的其他任何字符)的行都将导致整行被忽略。由于与T-SQL会话特定的temp- 表名,如果#之后的第一个字符为字母数字,则该行将不被忽略。

引用
	引用用于防止将特殊的关键字或字符解释为sqsh,例如空格,变量扩展或命令替换。引号包括三种类型:引号,转义,单引号和双引号。
	将字符括在单引号中可以保留引号中每个字符的字面解释。 单引号可能不会出现在单引号内,即使前面有转义符也是如此。 例如:
		1> \echo I can not expand '$username'
	 输出
		I can not expand $username
	字符\\用于转义紧随其后的字符的含义(从而避免解释)。 \字符本身可以转义。 例如:
		1> \echo I can\\'t expand '$username'
   	输出
      	I can't expand $username
	转义字符还可以用于转义换行以执行行连续,在这种情况下,新行将被丢弃,而续行会自动附加到前一行,例如:
		1> \echo Hello \\
       	--> World!
       	Hello World!
	用双引号引起来的字符会保留其中所有字符的字面含义,但$,'和\\除外。 可以通过转义将双引号包含在双引号中。
		1> \echo "\\"I can't deny it, I like $username\\", she said"
   	prints out
       	"I can't deny it, I like gray", she said
	
阐述
	读取输入行之后,sqsh尝试扩展任何别名的行(请参见下面的别名),然后尝试确定该行是否以command关键字开头。 一旦确定一行包含命令名,它就会对其执行三种扩展类型:变量替换和命令替换。 最后,如果在命令行上提供了波浪号,则将执行波浪号扩展,并将〜替换为相应的HOME目录名称。
		1> \echo ~sybase/err.log
   	may result in /home/sybase/err.log for example.
       	1> exec sp_helpdb
       	2> go > ~/db.log
	例如,可能会导致文件/export/home/dba/db.log,这取决于Unix登录名和所使用的确切操作系统。 扩展之后,命令行被分成单词并执行命令。

变量替换
	字符$用于指示单词内的变量替换或扩展。 可以通过\ set命令为这些变量分配值,如下所示:
	1>	\set name=value
	
	name可以是字符或下划线,后跟字符,数字或下划线的任意组合,并且不能包含任何特殊字符,例如(')和(“)。引入了对第一个字符为数字的限制,因为SQL 允许将金钱数据类型表示为$ nn.nn,其中n是数字。
	值可以包含任何内容,但是,如果要包含空格,则必须用引号将其引起来(请参见上面的单词和报价)。 请注意,为了防止变量扩展,请使用单引号或两个\,如下所示:
				1> \echo \\$name
	           	$name
	可以通过以下两种方式之一引用变量:
	$ variable以这种方式,所有字符,数字和下划线都将被视为变量的名称,直到到达另一种类型的字符(特殊字符或空白)为止。 $ {variable}仅当variable后跟字母,数字或下划线(不视为其名称的一部分)时才需要使用大括号。 注意,使用双引号可以达到相同的效果。
	应该注意的是,因为变量是在将命令行分成单词之前扩展的,所以如果变量的内容包含空格,则解析器会将其视为有效。 在以下示例中:
					1> \set x="1 2 3"
	           		1> \echo $x
				\ echo命令接收三个参数,“ 1”,“ 2”和“ 3”,尽管看起来好像只传递了一个参数。 此行为与大多数shell(例如csh,bourne shell等)一致。

	命令替换
		Sqsh支持第二种形式的扩展,称为命令替换。 这种扩展形式将命令行上的命令替换为外部UNIX命令的输出。 可以通过将要执行的命令行放在反引号(`)中来实现此扩展。 例如:
			1> \set password=`/sybase/bin/getpwd $DSQUERY`
       		1> \echo $password
       		Ilikepickles
		在此示例中,外部程序/ sybase / bin / getpwd用$ DSQUERY环境变量的当前内容执行,然后在执行\ set命令之前,将整个表达式替换为getpwd(ilikepickles)的输出。 默认情况下,在重新组合回命令行之前,首先根据$ ifs变量的内容将替换命令的输出分解为单词。 因此,通过覆盖$ ifs的内容,您可能会影响替换过程的行为。
		例如:
			1> \set ifs=":"
       		1> \echo `echo hello:how:are:you`
       		hello how are you
		对于将输入文件(例如/ etc / passwd)解析为字段,此机制通常很有用。

	输入/输出重定向
		与标准的Bourne shell(以及大多数其他shell)一样,可以使用由shell解释的特殊符号来重定向命令的输入和输出。 以下内容可能会出现在命令行的任何位置,但是只有在管道(|)之前指定的重定向实际上会对内部sqsh命令的行为产生任何影响(请参阅下面的管道)。
		<word
使用文件word作为命令的标准输入。 通常很少有sqsh命令实际上从stdin读取任何内容,因此这通常无效(请参见\ loop命令)。
			[n]>word
				将文件描述符n的输出(默认情况下为stdout)与文件word关联。 如果该文件不存在,则创建该文件; 否则将被截断为零长度。
			[n]>>word
				将文件描述符n的输出(默认情况下为stdout)附加到文件word,如果不存在则创建它。
			[m]>&n
				将文件描述符m的输出(默认为stdout)重定向到与文件描述符n相同的输出。 在命令行中指定重定向的顺序很重要,因为重定向是从左到右评估的。 例如:
					1> select * from select / *语法错误* /
                	2> \ go> / tmp / output 2>&1
				该语句首先将\ go命令的标准输出重定向到文件/ tmp / output,然后将stderr重定向到同一文件。 因此,当命令失败时,错误输出将在文件/ tmp / output中找到。
				但是,通过更改重定向顺序,您可以完全更改含义:
					1> select * from select
               		2> \go 2>&1 >/tmp/output
              	 	Msg 156, Level 15, State 1
               		Server 'SQSH_TEST', Line 1
               		Incorrect syntax near the keyword 'select'.
				在这种情况下,错误输出将发送到stdout,而本来将输出到stdout的重定向到/ tmp / output(在这种情况下,/ tmp / output将为空)。
				请阅读下面有关后台作业的部分,以获取有关文件重定向和后台作业之间交互的详细信息。

Pipes
	流水线是由“ |”分隔的一个或多个命令的序列,每个命令将前一个程序的stdout用于其自己的stdin。 但是,管道中的第一个命令必须是sqsh命令,而所有其他命令必须是外部(或UNIX)程序。 任何sqsh命令都可以通过管道运行,尽管对于其中许多命令(例如\ set命令),这样做实际上没有任何意义。 以下是管道的示例:
		1> select * from syslogins
       	2> \go | more
	此命令导致\ go命令生成的结果集被发送到more(1)程序,该程序随后将其发送到您的屏幕,在充满数据的每个屏幕上暂停(这是我编写sqsh的主要原因)。
	与标准的Bourne shell处理管道的方式相反,sqsh处理管道的方式有许多特殊之处。
	第一次出现竖线(|)字符之后的所有内容都被分成空格分隔的单词,包括特殊的shell命令,例如'2>&1'和其他竖线。 如果这些单词中包含任何变量,它们将按照上面的单词和报价中所述的相同引用规则进行扩展,唯一的例外是所有引号都保留在原处。 然后,将这些单词重新组合为一个字符串,并运送到/ bin / sh进行处理。
	简而言之,sqsh不会尝试解释第一个管道之后的内容,而是将其运送到“真实”外壳中进行工作。 这背后的理由是我很懒,并且不想像Bourne shell支持的那样编写所有相同的奇怪的变量处理,&&'ing,||',分组和变量扩展规则,而我让Bourne做 肮脏的工作。
	此方法的优点是您可以在管道之后执行一些非常复杂的操作,例如:
		1> select * from syscolumns
       	2> \go | (cd /tmp; compress -c > sysolumns.Z)
	并不是说我可以想到这样做的任何真正原因...但是如果您愿意的话,可以。

后台作业
	后台提供了一种机制,您可以在其中运行任何sqsh命令作为后台进程,并在其运行时继续工作。 Sqsh提供两种类型的后台设置:
	Deferred
		在这种模式下,sqsh在后台运行时将后台作业的所有输出重定向到一个临时文件(位于$ tmp_dir目录中),以使输出不会与当前正在处理的内容混在一起。 作业完成后,系统会通知您过程已完成,并且可以使用\ show命令查看输出。	
	Non-Deferred
		这对应于UNIX下后台进程的一般想法。 在这种模式下,作业的输出不会为您隐式重定向,因此可能会与您当前的工作混合在一起。 您可以通过$ defer_bg变量(默认为'1'或'On')来选择模式选择。 通常,不使用延迟模式的唯一原因是防止大型结果集填满文件系统。
		要指定作业在后台运行,只需在命令行末尾添加&即可,如下所示:
			1> sp_long_arduous_proc 1, 30
       		2> \go &
       		Job #1 running [xxxx]
       		1>
		当sqsh在命令行末尾遇到&时,它将生成一个子进程(Unix进程ID为xxxx),然后该子进程调用\ go。\ go命令,然后建立与数据库的新连接(使用当前 $ DSQUERY,$ username,$ password变量的值)并执行显示的查询。 在作业执行命令\ jobs时,\ wait和\ kill可用于监视或更改当前正在运行的作业(请参见下面的“命令”部分)。 当任何作业完成时,sshsh将显示一条通知,例如:
			1> select count(*) from <return>
       		Job #1 complete (output pending)
       		2>
		作业完成后,如果没有输出,则立即视为已终止,并且不会显示在当前正在运行的作业列表中。 但是,如果完整作业有待处理的输出,它将继续显示为正在运行的作业(使用\ jobs命令),直到使用\ show来显示作业的输出为止。 当退出父sqsh会话并且有活动的后台作业时,将显示一条消息:您有正在运行的作业或待处理的作业输出。 您必须先处理所有作业,然后才能退出sqsh。
		与管道一起使用时,存在一个已知的带有作业背景的错误,请参阅手册末尾的“错误”部分。
	Buffers
		在普通的isql中,仅维护两个缓冲区。 当前正在输入的缓冲区,以及包含最后执行的批处理的缓冲区(在运行“ vi”或“ edit”时将保留该缓冲区)。
		Sqsh维护几个不同的缓冲区集:
		工作缓冲区:此缓冲区直接对应于isql工作缓冲区。 它是在将当前批次发送到数据库之前在其中输入当前批次的缓冲区。
		历史记录缓冲区:实际上是最后一个$ histsize批处理中的0个或多个缓冲区链(可通过$ histsize变量配置)。仅当sqsh以交互方式运行时才维护此缓冲区; 也就是说,使用-i标志执行的批处理或通过UNIX提示符下的重定向执行的批处理将不会保留在历史记录中(毕竟,它们已经在某个位置的文件中)。
		如果变量$ histsave为True(请参见SPECIAL VARIABLES部分),而sqsh处于交互模式,则退出时,当前历史记录缓冲区将写入$ HOME / .sqsh_history。 然后,下次以交互方式启动该文件时,会将其读回到sqsh中。
		命名缓冲区:在会话期间的任何时间,都可以使用\ buf-copy命令将工作缓冲区或任何历史缓冲区复制到命名缓冲区中(请参见下面的“命令”)。 当您退出时,这些缓冲区会丢失(但是您可以使用\ buf-save命令将命名缓冲区保存到文件中)。

	Buffer Short-Hand
		许多命令都允许以简写形式引用所有这些缓冲区,这与csh(1)引用其命令历史记录的方式非常相似。这些简写形式均可用于COMMANDS部分中描述的任何缓冲区参数:
			!. 当前的工作缓冲区。
			!! 最后执行的命令(注意,该命令在非交互模式下不可用,因为它不维护历史记录)。
			!+ 下一个可用的历史记录条目。 这是一个只写缓冲区,因此通常仅适用于\ buf-copy之类的命令。
			!n参考历史记录#n。 每次将条目写入历史记录时,都会从最后一个条目开始为它分配一个递增的数字,使用此快捷方式,您可以引用任何给定的历史记录。
			!buf_name
				只是为了保持一致性,它提供了对命名缓冲区buf_name的引用,但是buf_name不带前导“!”。 也被认为是正确的。
			Buf_name
				引用命名缓冲区buf_name。
	Variables
		变量也可以包含在工作缓冲区中。 在这种情况下,变量将保持未扩展状态,直到缓冲区(通过\ go命令)发送到数据库为止,在此期间,变量将在缓冲区中扩展和替换。 可以通过$ expand变量更改此行为。 (请参见下面的特殊变量)。
		以下是在缓冲区中使用变量的示例:
			1> \set table_name=syscolumns
       		1> select count(*) from $table_name
       		2> \go
		这等效于执行查询:
			1> select count(*) from syscolumns
       		2> \go
		直。 通常,此功能对于重用大型复杂的where子句或长列名很有用
		引用规则在SQL缓冲区中的应用与在命令行中的相同。 也就是说,包含在双引号(“)中的任何变量都将被扩展,包含在单引号(')中的变量将保持不变。
			1> select "$username", '$username'
       		2> \go
		产生结果
			---- ---------
      		gray $username
	command substitution
		与命令行一样,在执行时,也可以在SQL缓冲区内替换UNIX命令的输出(仅在$ expand变量设置为1或true时,才可以一次)。 在这种情况下,在将缓冲区转发到SQL Server之前,将其包含在反引号(`)中的命令替换为其输出。 例如:
			1> select count(*) from `echo syscolumns`
       		2> \go
		使字符串“ echo syscolumns”在执行命令之前被单词syscolumns代替。 应该注意的是,替换命令的内容仅在\ go命令时执行,而不在输入SQL行时执行。

Flow-of-Control
		sqsh 2.0版的新增功能是能够使用\ if,\ while,\ do和\ func命令执行基本控制流和功能。
		Blocks & SQL Buffers
			所有sqsh控制流命令都是基于块的。 也就是说,如果满足命令的测试表达式,则将执行一个sqsh脚本块。例如,\ if命令的定义为:
				\if expression
               		block
           		\fi
			如果表达式的计算结果为成功条件(0),则此块可以是要执行的sqsh命令,SQL或控制流语句的任何行。
			在块执行期间,每个块都有自己的SQL缓冲区。 即,以下语句:
				1> /*
           		2> ** IMPROPER USAGE OF IF BLOCK
           		3> */
           		4> select count(*) from
           		5> \if [ $x -gt 10 ]
           		6>     sysobjects
           		7> \else
           		8>     sysindexes
           		9> \fi
           		5> go
		将产生:
			Msg 102, Level 15, State 1
           	Server 'bps_pro', Line 1
           	Incorrect syntax near 'from'
		因为字符串'sysobjects'或'sysindexes'已插入其自己的SQL缓冲区中。 一旦到达该块的末尾,这些缓冲区将被丢弃,并且由于该块中不包含\ go命令,因此不会产生其他错误。
		因此,编写上述表达式的正确方法是:
			1> /*
           	2> ** PROPER USAGE OF IF BLOCK
           	3> */
           	4>  \if [ $x -gt 10 ]
           	5>     select count(*) from sysobjects
           	6>     go
           	7> \else
           	8>     select count(*) from sysindexes
           	9>     go
           	10> \fi
		甚至:
			1> /*
          	2> ** PROPER USAGE OF IF BLOCK
           	3> */
           	4>  \if [ $x -gt 10 ]
           	5>     \set table_name=sysobjects
           	6> \else
           	7>     \set table_name=sysindexes
           	8> \fi
           	4> select * from $table_name
           	5> go
		另外,请注意,在到达\ fi终止符后,在sqsh提示中显示的行号将重置为外部SQL缓冲区中的当前位置。
		Expressions
			sqsh中的所有控制流语句都使用一个表达式来确定要执行的代码块。 就像UNIX的Bourne Shell一样,此表达式只是由sqsh执行的操作系统程序。 如果命令返回成功状态(调用exit(0)),则视为成功。
			例如,使用以下语句:
				\while test $x -lt 10
               		block
          		\done
			当$ x的当前值小于10时,它将执行block的内容。请注意,“ test”是标准的UNIX程序,用于执行基本的字符串或数字比较(以及其他操作)。 另外,与许多shell不同,sqsh没有内置版本的“ test”。
			但是,Sqsh支持“ test”的标准缩写形式:
				\while [ $x -lt 10 ]
               		block
           		\done
			使用此表达式时,带大括号('[')替换为带有'test'的sqsh解析器,而舍弃大括号(']')。
		Unsupported Expressions
			当前,sqsh不支持标准外壳谓词运算符“ &&”和“ ||”。 这些可以这样执行:
				\if sh -c "cmd1 && cmd2"
               		block
           		\done
			\if statement
			\ if命令根据提供的表达式的结果执行sqsh块的条件执行:
				\if expr1
               		block1
           		\elif expr2
               		block2
           		\else
               		block3
           		\fi
			在此示例中,如果表达式expr1的计算结果为true,则对块block1进行计算。 否则,如果表达式expr2的计算结果为true,则对块block2进行评估。 最后,如果所有其他测试均失败,则对block3进行评估。
			请注意,与Bourne Shell不同,每个\ if命令都必须带有尾随\ fi语句。 同样,sqsh解析器也不是很聪明:\ else和\ fi语句必须是它们出现所在行中的唯一内容,并且不能将它们别名为另一个名称。
			\while statement
			\ while命令在提供的表达式保持为true的同时执行一段sqsh代码。
				\while expr
               		block
           		\done
			在此示例中,虽然表达式expr的计算结果为true,但仍对block块进行评估。
			\ break语句可用于突破最里面的\ while或\ for循环(更多关于\ for的内容)。
			\for statement
			\ for命令为提供的每个单词执行一个sqsh代码块:
				\for var in word ...
               		block
           		\done
			对于提供的每个单词,将变量$ var的值设置为单词,并执行代码块。 当列表中没有更多单词时,执行结束。
			与\ while一样,\ break语句可用于突破最内层的执行循环。
			\do command
			\ do命令有点像语句和命令之间的交叉。
			它是\ go的一种形式(有关\ go命令的详细信息,请参见下文),其中可以对查询返回的每一行数据执行一个sqsh代码块。执行该块时,特殊的sqsh变量#[0 -9] +(带数字的散列)可用于引用返回查询中的值。 例如以下命令:
			选择dbid,从master..sysdatabases命名
				\do
               		\echo "Checkpointing database #2, dbid #1"
               		use #2
               		go
               		checkpoint
               		go
           		\done
			将导致在服务器上的每个数据库中发出CHECKPOINT命令。
		Command line options
			\ do命令建立新的连接,以供代码块在执行时使用。 默认情况下,使用当前用户名($ username)和当前密码($ password)建立到当前服务器($ DSQUERY的当前设置)的连接。 但是,可以使用命令行选项来覆盖此行为:

		-D database
			建立与数据库的连接,作为提供的数据库。

		-U username
			建立与服务器的连接作为提供的用户名。

		-P password
			使用提供的密码(希望该密码是提供的用户名的有效密码)建立与服务器的连接。
	
		-S server | host:port [:filter]
			建立与提供的服务器的连接。

		-n
			不要创建供\ do循环使用的连接。 该标志与以上标志互斥。 启用此标志后,尝试在块内执行数据库命令将生成大量CT库错误。

	Column variables
		如上所述,可以使用特殊的#[0-9] +变量来确定当前结果集中的列的值。 因此,变量#1将包含当前结果集的第一个列的值,而变量#122将包含第122个列的值(列号从1开始)。
		在嵌套\ do循环的情况下,只需为每个先前的嵌套级别附加一个加号'#'即可引用先前的嵌套级别中的值,例如:
			从系统对象中选择ID,名称
			\do
           		select name, indid from sysindexes where id = #1
           		\do
               		\echo "Table ##2 (objid ##1) has index #1"
           		\done
       		\done
		显然,这不是您在现实生活中执行此查询的方式,但是您知道了。
		当使用NULL值扩展列时,column变量将扩展为空字符串('')。 同样,对不存在的列(例如,#0)的引用将导致空字符串('')。
		与常规sqsh变量(用'$'引用的变量)一样,列变量包含在单引号中时将不会扩展。
		Aborting
		如果在处理\ do循环期间发出了\ break或\ return命令,当前查询将被取消,该循环使用的连接将被关闭(除非提供了-n标志),并且\ do循环将 中止。
		\func command
		\ func命令用于将sqsh代码的可重用块定义为函数。 函数的定义如下:
			\func stats
           		\if [ $# -ne 1 ]
               		\echo "use: stats [on | off]"
               		\return 1
           		\fi
           		set statistics io ${1}
           		set statistics time ${1}
           		go
       		\done
		在此示例中,建立了一个名为stats的新函数,该函数期望一个参数“ on”或“ off”。 使用此参数,统计信息将启用或禁用基于时间的统计信息和基于I / O的统计信息。
		一旦建立,该函数可以这样调用:
			\call stats on
		导致$ {1}的所有实例都被stats的第一个命令行参数替换。
		Command line options
		当前,\ func命令仅可使用一个命令行参数。
		-x
			使函数导出为sqsh命令。 也就是说,该函数可以直接调用而无需\ call命令。 此行为是可选的,因为命令名称可能与T-SQL关键字发生冲突。 使用此标志时,建议在函数名称前加反斜杠(\)。
		Function variables
		如上面的示例所示,在函数主体中可以使用几个特殊变量。 这些是:
			$#
				扩展为调用时提供给函数或脚本的参数数量。
			$*
				扩展为调用时提供给函数或脚本的参数的完整列表。
			${0}..${N}
				扩展为函数的位置参数。 $ {0}是要调用的函数或脚本文件的名称,$ {1}是第一个参数,$ {2}是第二个,依此类推,直到参数N。注意,与大多数shell不同,sqsh 要求使用特殊的花括号语法($ {1},而不是$ 1)来引用函数参数。 原因是$ 1是有效的MONEY值,并且使用花括号消除了这种歧义。
			$?
				调用函数后,它将包含其返回值(请参见下文)。
			Return value
			可以通过\ return命令从函数返回值。
			像这样:
				\return N
			其中N是一个正值。 该返回值可通过$?提供给函数的调用者。 变量。 按照惯例,返回值0表示成功。
			如果未显式调用\ return,则默认返回值为$?的当前值。 变量(在函数进入时设置为0)。因此,如果函数中调用了任何SQL语句,则默认返回值为$? 将是在处理SQL语句期间返回的最后一个错误代码。

Kerberos Support
	从版本2.1.6开始,sqsh提供与isql相同的命令行选项来处理Kerberos网络身份验证。
	在版本2.1.5中,使用-K和-R选项添加了对Kerberos的实验性支持。 -K仅仅是设置Kerberos的开关。 在sqsh 2.1.6中,引入了更高级的网络身份验证实现,尽管仍处于试验阶段。
	通过使用参数-K,-R,-V,-Z,您可以使用定义的网络安全设置(libtcl.cfg)。 命名的选项与为isql定义的选项相同。
	-K keytab_file
		DCE的Keytab_file名称。

	-R server_principal
		如果在接口中指定的服务器名称不同于真实服务器名称,则服务器主体名称。

	-V [bcdimoqru]
		指定用于安全机制的安全选项。 每个字符代表一个特定的安全服务。

	-Z [secmech|default|none]
		在libtcl.cfg文件中请求为Kerberos,DCE或PAM定义的安全性机制。 使用secmech可以指定SECURITY条目的名称,或者是libtcl.cfg中第一个可用条目的默认名称。 必须指定任何内容以禁用网络身份验证或重置变量$ secmech或$ secure_options中可能的现有值。
		例如,使用Kerberos(这是默认设置,即libtcl.cfg [SECURITY]标签中的第一个条目)连接到服务器:
			~$ sqsh -SSYB1502 -Uuser1 -RFC6A1502 -Z
       \connect: Network authenticated session expires at:
               16 Feb 2010 15:28:39 (11764 secs)
       SYB1502.user1.master.1> select @@servername,@@authmech,
                                    show_sec_services();
       ----------------  -----------  ----------------------------------
       FC6A1502          kerberos     unifiedlogin delegation mutualauth
                                    integrity confidentiality
                                    detectreplay detectseq

		请注意,服务器的真实名称(@@ servername)与interfaces文件中的服务器名称不同,因此我们必须通过-R参数指定主体名称。 当您不同时指定-V参数和-Z时,将启用所有可用的安全性选项。 如果指定-V而没有任何安全服务选项,则仅隐式设置网络身份验证的选项u,如果未指定-Z,则将使用默认的安全性机制。
		[user1@linux-fc6a ~]$ sqsh -SFC6A1502 -Uuser1 -V
       Open Client Message
       Layer 7, Origin 9, Severity 5, Number 1
       ct_connect(): security service layer: internal security control
                   layer error:
                   Security service provider internal error -1765328352
                   occurred.
       [user1@linux-fc6a ~]$ kinit
       Password for user1@LOCALDOMAIN:
       [user1@linux-fc6a ~]$ sqsh -SFC6A1502 -Uuser1 -V
       \connect: Network authenticated session expires at:
               16 Feb 2010 15:28:39 (10964 secs)
       FC6A1502.user1.master.1>
		连接成功后,sqsh将安全机制的真实名称存储在变量$ secmech中。 例如:“ \ echo $ secmech”可能显示csfkrb5。 参数-V从bcdimoqru的可能值中获取字符列表。 选项u启用网络身份验证,这是默认选项,无论是否使用-V或-Z,都将始终设置该选项。
		b - chanbinding     : 通道绑定
       	c - confidentiality : 数据保密服务
       	d - delegation      : 允许委托凭证
       	i - integrity       : 数据完整性服务
       	m - mutualauth      : 建立连接的相互认证
       	o - dataorigin      : 数据来源盖章服务
       	q - detectseq       : 乱序检测
       	r - detectreplay    : 数据重放检测
       	u - unifiedlogin    : 网络身份验证

	请检查master.dbo.syssecmechs中可用的服务。 -V提供的不存在或不受支持的服务将被忽略。 如果指定-V和/或-Z,则sqsh假定尝试了网络身份验证,并且不需要密码。
	如果您具有经过网络身份验证的连接,并且希望使用具有用户名和密码的常规ASE身份验证\重新连接,则必须通过指定-Znone来重置网络身份验证变量
	例如:
		[user1@linux-fc6a ~]$ sqsh -SFC6A1502 -Uuser1 -V
       \connect: Network authenticated session expires at:
               16 Feb 2010 15:28:39 (10764 secs)
       FC6A1502.user1.master.1> \echo $secmech csfkrb5
       FC6A1502.user1.master.1> \reconnect -SASE1502 -Usa -Psybase
       Open Client Message
       Layer 7, Origin 9, Severity 5, Number 8
       ct_connect(): security service layer: internal security control
                   layer error:
       Consistency checks performed on the credential failed
       (minor status 0).
       FC6A1502.user1.master.1> \reconnect -SASE1502 -Usa -Psybase -Znone
       ASE1502.sa.master.1>
	第一次\ reconnect失败,因为sqsh仍想尝试网络身份验证。 但是,不存在“ sa”的用户主体,也没有设置票证,因此连接失败。 第二个\ reconnect成功,因为-Znone选项重置了适当的变量。 如果使用kinit或任何其他客户端工具更新了Kerberos票证,则sqsh会话必须执行\ reconnect来刷新凭据并防止会话过早中止。 使用命令\ snace,您可以请求会话到期间隔。 根据设置的安全服务,票证过期后,数据库连接可能会在没有警告的情况下关闭。
	有关Kerberos网络身份验证的详细信息,请参见《 Sybase系统管理指南,第1卷》中的第16章“外部身份验证”。

COMMANDS
	Read-Eval-Print
		read-eval-print循环是sqsh系统的核心,它负责提示用户输入并确定应执行的操作。该循环通常仅用于内部使用,但是它们对用户开放,因为 是可以用它们完成的一些创造性的事情。
		\loop [-i] [-n] [-e sql] [file]
			\ loop命令从文件,提供的SQL语句或用户(请参阅下面的选项)读取输入,确定当前行是T-SQL语句的一部分还是sqsh命令,并执行适当的操作 行动。 当以交互方式运行时,\ loop还负责显示当前提示(请参见下面的$ prompt)。
			当所有输入都用完(遇到文件尾)或命令(例如\ exit)要求\ loop退出时,\ loop完成。
			-i 通常,如果提供了文件但不存在,则\ loop将返回错误状态,通常会导致sqsh退出。 通过提供-i标志,控制将返回到调用循环,就像到达文件末尾一样(也就是说,没有错误条件)。
			-n 默认情况下,如果尚未通过\ connect命令建立连接,\ loop将自动尝试连接到数据库.-n标志禁用此行为,从而允许\ loop处理不需要数据库支持的命令。
			-e sql
				使\ loop处理sql的内容,就像用户在提示符下键入sql一样,并且对\ go的隐式调用会自动附加到该语句。 如果提供了-e的多个实例,则它们将全部作为一个批次发送到SQL Server进行处理。 此选项也可能无法与文件名结合使用。
			File
				指定要用作输入而不是从用户或-e标志读取输入的文件名。

Database Access	
	鉴于sqsh的大小和复杂性(仅看此手册页的长度),令人惊讶的是实际上实际上只有很少的数据库操作命令。 以下是影响或使用当前数据库连接的命令:
	\connect [-A packet size] [-c] [-D db] [-G tds version} [-S srv] [-U user] [-P pass] [-I ifile] [-J charset] [-K keytab] [-R server_principal] [-n] [-N appname] [-Q query_timeout] [-T login_timeout] [-V [bcdimoqru]] [-X] [-z language] [-Z [secmech|default|none]]
		此命令主要用于内部使用以建立与数据库的连接。 如果已经建立了连接则无效,但是,如果尚未建立连接并且未提供$ password,则要求输入密码并建立连接。\ connect接受以下参数:
		-A
			指定用于与SQL Server通信的网络TDS数据包的大小。 此值必须在512到8192之间,并且是512的倍数。检查SQL Server配置以确定支持的数据包大小。 也可以在运行时使用$ packet_size变量指定此值。
		-c
			默认情况下,\ connect命令使用$ database的内容来确定建立连接时应使用的数据库上下文(\ reconnect在重新连接时使用它来保留当前数据库上下文)。 -c标志禁止这种行为,而是使用默认的登录数据库上下文。
		-D db
			使\ connect在建立连接后尝试自动将数据库上下文切换到db。
			使用此标志等同于在建立连接之前设置$ database变量。
		-G tds version
			设置要使用的TDS版本。 有关TDS版本的更多信息,请参见全局启动参数-G。
		-S srv | host:port[:filter]
			要连接的Sybase服务器的名称或地址,如果未提供,则默认为$ DSQUERY。
		-U user
			Sybase用户以该身份连接到数据库,如果未提供,则默认为$ username变量。
		-P password
			连接服务器所需的用户密码。 如果未提供,则默认为$password。
		-I ifile
			要使用的备用Sybase接口文件的完整路径。
		-J charset
			与服务器通信的客户端字符集的名称。
		-K keytab_file
			用于DCE用户身份验证。
		-R principal_name
			当名称不同于$ DSQUERY值时,用于Kerberos用户身份验证以指定服务器主体的名称。
			另请参见有关Kerberos支持的讨论。
		-n
			指定连接必须使用符合ANSI的链接模式。
		-N appname
			在sysprocesses表中指定服务器将用于program_name的应用程序名称。
		-Q query_timeout
			设置查询超时时间(秒)。
		-T login_timeout
			指定会话建立的最大等待时间。
		-V [bcdimoqru]
		指定会话建立的最大等待时s
		-X
			使用客户端密码加密(如果支持)启动到服务器的登录连接。 如果SQL Server不能识别此选项,或者用于编译sqsh的CT-Lib版本不支持此选项,则它将被忽略。 也可以使用$ encryption环境变量来设置此选项。
		-z language
			指定替代语言以显示sqsh提示和消息。 没有-z标志,将使用服务器的默认语言。 也可以使用$ language变量进行设置。
		-Z [secmech|default|none]
			指定用于用户认证的安全性机制。 例如,用于Kerberos支持的csfkrb5。

	\reconnect [-A packet size] [-c] [-D db] [-G tds version} [-S srv] [-U user] [-P pass] [-I ifile] [-J charset] [-K keytab] [-R server_principal] [-n] [-N ppname] [-Q query_timeout] [-T login_timeout] [-V [bcdimoqru]] [-X] [-z language] [-Z [secmech|default|none]]
		 reconnect命令可用于使用新的用户名,服务器名或密码(如果需要)来强制重新连接到数据库。 如果此命令失败,则保留当前连接(如果存在),但是如果成功,则关闭当前连接,而新连接将成为唯一的活动连接。
		\ connect接受的所有参数也将被\ reconnect接受(实际上\ reconnect使用\ connect建立新连接)。
	\run
		该命令将执行\ loop这样的脚本文件,但是\ run命令将允许可选的脚本参数。 此外,该命令接受以下参数。
		-e 在打开echo的情况下运行脚本文件。
		-f 禁止页脚。
		-h 禁止标题。
		-l用漂亮的输出样式抑制分隔线。
		-n 禁用SQL缓冲区变量扩展。
		-p 报告运行时统计信息。
		-m style
			指定输出样式{bcp|csv|horiz|html|meta|none|pretty|vert}.
		-i filename
			指定由sqsh运行的文件名的必需参数。
			For example: \run -p -i ~/tmp/runtst.sqsh 10 -m pretty
	\lcd dirname
		本地更改目录。 该命令以目录名称作为参数,并将本地SQSH上下文更改为此目录。 您可以使用\ lcd –返回上一个目录。 如果退出sqsh,则shell仍位于启动sqsh的目录中。
	\pwd
		打印工作目录。 显示当前本地工作目录的名称。
	\ls
		列出当前目录中的文件。 不带任何参数,基本上是\ shell ls的快捷方式。
	\snace
		将显示网络身份验证会话的会话到期间隔,例如在启用Kerberos的会话中。
	\go [option][xacts]
		将工作缓冲区的内容发送到数据库,如果尚未建立与数据库的新连接(通过调用上面的\ connect)。 它们将查询结果显示回stdout并返回,从而导致工作缓冲区被清除并移至历史记录缓冲区的末尾。
		如果工作缓冲区为空,并且$ repeat_batch变量设置为“ On”,\ go将尝试重新运行最后执行的命令(如果启用了历史记录支持,则仅在交互模式下有效)。
		\ go接受以下参数:
		-d display
			如果将X11支持编译到sqsh中,并且正在使用X显示模式(请参见下面的-x),那么display将用作结果集的X显示区域。 默认情况下,假定使用环境变量$ DISPLAY。
		-e
			在将扩展的SQL缓冲区发送到服务器之前,先对其进行回显。
		-f
			关闭页脚消息“(受影响的%d行)”的显示。 也可以通过$ footers变量关闭页脚消息。
		-h
			关闭所有列标题。 也可以通过$ headers变量将其关闭。
		-m style
			在命令执行期间,暂时将显示样式更改为样式。 当前支持的样式是horiz(或hor或水平),vert(或垂直),bcp,csv,html,meta,pretty和none。 可以通过$ style变量或-m命令行标志永久设置显示样式。
		-l
			使用-m pretty输出样式时,禁止使用分隔线。 也可以通过$ nosepline变量关闭。
		-n
			在将工作缓冲区发送到服务器之前,先关闭工作缓冲区中的变量扩展,也可以通过$ expand变量来关闭它。
		-p
			从服务器成功返回结果集后,打开性能统计信息的输出。 也可以通过sqsh的-p命令行参数或$ statistics变量启用此功能。
		-s sec
			如果xacts的值大于1,这将导致sqsh在执行下一个事务之前休眠数秒。 请注意,用-p标志显示的统计信息中不包括睡眠时间。
		-t [filter]
			通过外部程序过滤命令批处理,然后过滤,然后再发送给SQL Server。 如果未提供filter,则使用$ filter_prog(默认为'm4-')。 也可以通过$ filter和$ filter_prog变量设置该值。
		-w width
			在查询有效期内覆盖$ width的值(请参见下面的$ width)。
		-x [xgeom]
			打开X11显示过滤器(仅当X11支持被编译为sqsh时),这会将结果集发送到单独的窗口。 如果提供了xgeom,则该值将在查询有效期内用作$ xgeom(请参见下面的$ xgeom)。
		-T xwin_title
			指定要创建的X结果窗口的标题名称。 这将临时覆盖$ xwin_title的值。 仅在与-x一起指定-T时有用。
		xacts
			指定应该执行工作缓冲区的内容的次数。 请注意,与isql相似,结果集将仅在批处理的最终执行期间显示。 同样,工作缓冲区的内容在第一次执行之前仅扩展了一次,因此缓冲区的内容在后续执行之间不会更改。
	\bcp [bcp_options] table[:slicenumber|:partition name]
		\ bcp命令充当一种增强的\ go命令,该命令通过bcp协议将批处理的结果集重定向到另一台服务器。 尽管可以将结果集\ bcp返回到当前服务器($ DSQUERY变量),但这可以通过SELECT INTO轻松实现。
		\ bcp的细节如下:首先,扩展当前的SQL批处理(除非将$ expand变量设置为0),然后将其发送到数据库进行处理。 如果一切顺利,则将建立到目标数据库的新连接(通过$ DSQUERY或-S标志指定),以使用bcp传输结果集。 然后,源数据库连接的输出绑定到新的bcp连接,并执行数据传输。 \ bcp可以处理多个结果集,而不会出现任何问题(包括从存储过程返回的结果集等),只要所有结果集对目标表均有效。
		可以使用bcp显示样式设置和文件重定向来执行“ bcp out”的等效操作(请参阅$ style变量)。
		-A packet
			指定用于与目标服务器通信的TDS数据包大小。 如果未提供,则默认为$ packet_size变量值,或者(如果未设置)默认服务器数据包大小(通常为512字节)。
		-b batch_size
			服务器之间的单个事务中传输的记录数。 请注意,到达结果末尾将导致批次被转移,而与batch_size的值无关。 默认值为整个结果集。
		-i "<initialization command>"
			使用-i参数,可以将SQL命令发送到目标服务器,该命令将在开始批量复制操作之前执行。 如果您需要先截断目标表,这将很有用。 例如:
				1> select * from proddb..materials
               	2> \bcp -SDTA -i "truncate table testdb..materials" -N -X testdb..materials
		-I ifile
			要使用的备用Sybase接口文件的完整路径。
		-J charset
			指定用于与SQL Server通信的默认字符集。 这默认为当前字符集($ charset变量的值)。
		-m maxerr
			\ bcp放弃虚影之前可能失败的最大批处理数量(默认为10)。 请注意,这仅指给定批次内的失败。 当对服务器执行多个结果集的bcp时,如果给定的结果集具有太多的列或错误的数据类型,则无论maxerr的值如何,整个bcp进程都会中止。
		-N
			指示在结果集中提供目标表中标识列的值。
		-P password
			连接服务器所需的用户密码。 如果未提供,则默认为$ password。
		-S server |host:port[:filter]
			要连接的Sybase服务器的名称或地址,如果未提供,则默认为$ DSQUERY。
		-T
			传输中的数据而无需在客户端执行字符集转换。
		-U user
			Sybase用户以该身份连接到数据库,如果未提供,则默认为$ username变量。
		-X
			导致使用客户端加密与目标服务器进行密码协商。
		-z language
			指定要使用的语言设置。
		table[:slicenumber|:partition name]
			与常规bcp一样,表可以是目标服务器中完整或部分指定的表名。 请注意,由于在bcp进程中建立了新的数据库连接,所以该连接的数据库上下文可能与当前上下文不同,因此通常最安全的方式是在database.owner.table形式中指定表名。 对于分区表,您可以提供一个分片号或分区名(单独的表名和带有冒号(:)的分区),以将数据bcp到指定的分区中。
	\rpc [rpc_opt] rpc_name [[parm_opt] [@var=]value ...]
		\rpc命令用于直接在连接的服务器中调用存储过程调用。 该命令对于与不直接支持语言调用的Open Server通信特别有用。
			\ rpc使用一个或多个可以被命名(使用@var)或匿名(不提供名称)的参数来调用远程过程rpc_name。不幸的是,由于Sybase的RPC实现不直接支持大多数隐式数据 类型转换(主要是在VARCHAR(您在命令行上提供的字符串)和大多数其他数据类型(远程过程期望的)之间进行转换,\ rpc命令的语法有些复杂。但是,简而言之,事情是这样的:
			在解析\ rpc命令行时,sqsh尝试根据格式猜测参数值的数据类型(例如,如果仅包含数字,则假定为整数),然后sqsh执行显式数据类型 在调用远程过程调用之前进行转换。 如果sqsh猜错了,则提供几个标志以强制其执行正确的数据类型转换(请参阅parm_opt)。
		Display Options
		以下选项可以在命令行的任何位置提供,并用于影响从远程过程调用返回的结果集的显示方式:
		-d display
			如果X支持被编译为sqsh,则display的值将用作X windows DISPLAY变量。 注意,这通常在下面带有-x标志。
		-f
			关闭页脚消息“(受影响的%d行)”的显示。 也可以通过$ footers变量关闭页脚消息。
		-h
			关闭所有列标题。 也可以通过$ headers变量将其关闭。
		-m style
			在命令执行期间,暂时将显示样式更改为样式。 当前支持的样式是horiz(或hor或水平),vert(或垂直),bcp,csv,html,meta,pretty和none。 可以通过$ style变量或-m命令行标志永久设置显示样式。
		-r
			在执行之前请求重新编译过程。
		-w width
			临时将输出宽度设置为width。 可以通过$ width变量永久设置输出宽度。
		-x [xgeom]
			将输出发送到单独的X窗口。 如果提供了xgeom,则X窗口将使用此几何(有关详细信息,请参见$ xgeom)。
		-T xwin_title
			指定要创建的X结果窗口的标题名称。 这将临时覆盖$ xwin_title的值。 仅在与-x一起指定-T时有用。
	Parameter Options
	可以在指定参数值之前立即提供以下选项,这些选项用于影响sqsh在调用远程过程之前解释值内容的方式。 尽管sqsh允许将这些参数的任何组合进行组合,但是将-x标志与任何其他标志组合在一起才真正有意义。
	-b
		指示在调用rpc_name之前,应将指定的值转换为VARBINARY。 如果值以“ 0x”开头且仅包含数字,则该标志是隐式的(即,您无需提供)。
	-c
		指示在调用rpc_name之前,应将指定的值转换为VARCHAR。 如果值与其他数据类型的任何隐式转换都不匹配,则此标志是隐式的。
	-d
		指示在调用rpc_name之前,应将指定的值转换为double(浮点数)。 如果值采用有效的浮点表示法(例如0.1,.1、1.4e10或4e10),则此标志是隐式的。
	-i
		指示在调用rpc_name之前,应将指定的值转换为整数(int)。 如果value仅包含数字(以及可选的前导符号),则此标志是隐式的。
	-y
		指示在调用rpc_name之前应将指定的值转换为money。 如果值以“ $”开头,并且仅包含数字和小数(可选),则此标志是隐式的。
	-n
		指示在调用rpc_name之前,应将指定的值转换为数字。 该标志永远不会隐式,因为值将始终与int(-i)或float(-d)匹配; 但是,过程调用将根据需要将这两种类型都隐式转换为数字。
	-u
		指示应忽略该值并将其视为NULL值。如果value为“”,则此标志是隐式的。
Buffers
	以下命令可用于创建,销毁或操纵上面“缓冲区”部分中描述的各种缓冲区。
	\clear
		\clear命令将丢弃当前缓冲区,并且与\ reset命令相反,不会将当前缓冲区保存到历史记录中。 在使用readline支持编译sqsh时,此命令还将清除屏幕。 (与^ l一样。)别名清除在启动时自动建立。
	\history [-i] [-x count]
		显示已通过\ go命令发送到数据库或通过\ reset命令从工作缓冲区清除的最后$ histsize批处理。 使用选项-i时,还将显示使用缓冲区的次数以及上次使用缓冲区的时间。 使用$ histunique功能时,此信息可能特别有用。 -x选项可以指定要显示的最新历史记录条目的数量,而不是历史记录条目的总列表。
	\hist-load [filename]
		加载历史记录文件并将项目附加到当前历史记录列表中。 如果未将文件名指定为参数,请使用$ history。
	\hist-save [filename]
		将当前历史记录缓冲区保存到$ history文件或作为参数指定的文件名中。
	\redraw
		将请求返回到当前的read-eval-print循环,以重新显示当前的工作缓冲区。 如果以非交互方式运行,则此命令无效。
	\reset
		\reset命令直接对应于isql'reset'命令,将请求返回到read-eval-print循环以清除当前工作缓冲区的内容,如果以交互方式运行,请放置缓冲区的副本 进入历史记录缓冲区。 在启动sqsh时会自动建立别名重置,以与isql向后兼容。
	\buf-append dst-buffer [src-buffer]
		将src-buffer的内容(默认为!。)追加到dst-buffer的内容(如果存在)。 如果dst-buffer不存在,则创建它。
	\buf-copy dst-buffer [src-buffer]
		将src缓冲区的内容(如果未提供,则默认为!。,即工作缓冲区)复制到dst-buffer。 有关缓冲区命名约定的信息,请参考BUFFERS。
	\buf-del [buffer|range]
		从历史记录列表中删除历史记录缓冲区。 您还可以指定一个范围列表,该范围列表由第一个和最后一个缓冲区号组成,并用'-'分隔。例如:“ \ buf-del 1-10”将删除前10个历史记录条目。 另一个示例“ \ buf-del 21”将仅删除编号为21的缓冲区。请注意,历史记录缓冲区将连续重新编号。
	\buf-edit [-r read-buf] [-w write-buf]
		\ buf-edit命令用于编辑缓冲区的内容,并将更改放入另一个缓冲区。 该命令只能在交互模式下运行。 如果未提供read-buf,则要编辑的缓冲区默认为!。,如果不为空,则默认为!!。 如果未提供write-buf,则将已编辑的缓冲区写回到!.。
		默认情况下,\ buf-edit首先使用环境变量$ EDITOR,然后使用$ VISUAL确定要使用的编辑器,如果未设置该变量,则默认为'vi'。
		重要的是要注意,从版本1.2开始,\ buf-edit不再能够使用别名作为启动编辑器的名称,这主要是由于别名行为的改变( 有关详细信息,请参见下面的“别名”部分。
		在启动sqsh时会自动建立edit vi和emacs命令,以与isql向后兼容。
	\buf-get buffer
		\buf-get命令是运行\ buf-copy的简写方法,它等效于运行:
			\buf_append !. buffer
	\buf-load [-a] filename [dst-buffer]
		将文件名的内容复制到dst-buffer中(默认为!。)。 如果提供了-a标志,则filename的内容将附加到dst-buffer。 请注意,尝试写入历史记录缓冲区的内容是非法的。
	\buf-save [-a] filename [src-buffer]
		将src缓冲区的内容(默认为!。)保存到文件名中。 如果提供了-a标志,则将内容附加到文件名,而不是覆盖当前内容。
	\buf-show [buffer]
		显示命名缓冲区的内容。 如果未提供缓冲区,则显示所有已命名缓冲区的内容。 此命令与上面的命令略有不同,因为仅提供合法的命名缓冲区,历史记录缓冲区,而工作缓冲区将没有结果。
Variables
	以下命令用于操作内部变量和环境变量的内容。
	\set [-x] [name=value ...]
		如果没有为\ set提供参数,则显示所有变量的当前值。 否则,变量名称将设置为value。 请注意,某些内部变量(请参见SPECIAL VARIABLES)只能设置为某些值,因此此操作可能会失败,而名称上的先前内容将保持不变。 -x标志使该变量导出到从sqsh启动的任何程序的环境中。
Job Control
	以下命令用于查看当前正在运行的后台作业的状态或对其进行操作,这些命令大致对应于csh(1)之类的shell提供的命令。
	\jobs [-i]
		显示任何当前正在运行的作业的状态,包括这些作业是否具有挂起的输出,它们已经运行了多长时间以及何时开始。 -i选项将显示一些其他作业信息。 请注意,作业的总运行时间是从轮询时由read-eval-print循环将其标记为完成的那一刻起确定的,而不是从其实际结束并由信号处理程序标记为终止的那一刻起确定的。
	\wait [job_id]
		将暂停直到由job_id指定的作业完成。 如果job_id为负数,则\ wait将暂停直到所有待处理的作业完成。 如果没有任何待处理的作业,或者job_id不属于正在运行的作业,则会显示错误消息。 请注意,如果多个作业正在运行,并且其中一个发出了\ wait,则在特定作业的等待时间内完成其他作业时,可能不会自动发出其他信号。 其他作业可能也需要用\ wait -1发出信号,以使sqsh注意到已完成。
	\kill job_id
		终止由job_id指定的作业,丢弃可能会延迟该作业的任何输出。 如果job_id不是正在运行的作业,则会显示一条错误消息。
	\show job_id
		显示完成的后台作业job_id的延迟输出,并将该作业从挂起作业列表中删除(在该过程中删除延迟文件)。 如果job_id仍在运行,或者不是有效的完整作业,那么将显示错误消息。 您可能需要先发出\ wait job_id,才能收到有关实际作业完成的通知。
Aliasing
	从1.2版开始,sqsh支持完整的csh样式命令别名。 使用此功能,sqsh在进行任何形式的扩展之前都会检查每行的第一个单词,以查看其是否与现有别名的名称匹配。 如果是这样,将使用别名定义替换其名称重新处理该命令。 但是,与csh不同,别名中只有一种历史替换形式可用:“!*”条目,指示当前行正在扩展。 如果不要求扩展历史记录,则命令行上的参数保持不变。
	像csh一样,别名不会递归扩展,因此创建一个别名扩展为相同名称的命令是完全合法的。
	以下命令用于创建别名:
	\alias [alias_name=alias_body]
		如果没有为\ alias命令提供任何参数,那么将显示当前有效的别名列表。 否则,它将创建一个新别名,其别名为alias_name,主体为alias_body。 如果alias_name已经存在,则将现有alias_name的主体替换为新定义。
		定义新别名后,每当sqsh遇到以alias_name开头的行时,在执行任何进一步处理之前,将其余行替换为alias_body。
		如果字符串“!*”存在于alias_body内的任何位置,则会在该点插入提供给别名的参数,否则,该参数将附加到别名定义的末尾。 例如:
			1> \alias hi='\echo !* said hello'
           	1> hi Scott
           	Scott said hello
		如果别名不包含!*关键字,则其行为如下:
			1> \alias hi='\echo said hello'
           	1> hi Scott
           	said hello Scott
		在给定的alias_body中多次包含!*是完全合法的。 当前无法转义字符串!*,如果您确实需要此功能,请给我发送邮件。
	\unalias alias_name
		删除alias_name。
Miscellaneous
	剩下的命令。
	\exit [x]
		\ exit命令请求当前的read-eval-print循环停止处理。 当最后一个循环返回时,sqsh exit(1)s。 您可以指定一个退出代码作为参数,该参数将存储在$ exit_value中,并在sqsh退出时用作返回给Shell的值。 (0 <= x <= 255)。
	\abort
		使所有嵌套的read-eval-print循环中止处理,导致sqsh以254的退出值退出(请参阅退出状态部分)。
	\read [-a] [-n] [-h] var_name [< filename]
		从用户读取一行输入,将该行的文本放在变量var_name中。 如果使用-n,则尾随的换行符将留在文本行中;如果提供了-a,则该行的文本将附加到var_name的现有值之后。 -h标志关闭键入字符回显给用户的回声。 也可以使用\ <文件重定向符号来读取文件的内容。
	\sleep seconds
		导致sqsh暂停几秒钟。 这在需要在批处理之间短暂暂停的批处理脚本中很有用(这对我测试后台作业主要有用)。
	\echo [-n] [args ...]
		就像UNIX echo(1)一样,这会将其参数输出到stdout,然后换行。 如果提供了-n标志,则省略换行符。
	\warranty
		显示标准的GNU保修。
	\help [command]
		不带任何参数的\ help将显示所有可用命令的简短列表,否则,它将为命令提供特定的帮助(如果有)。 当在特定命令上请求帮助时,\ help查找文件$ help_dir / command.hlp并将其显示到stdout。
	\shell [shell command]
		如果未提供shell命令,则sqsh将执行$ SHELL。 如果未设置$ SHELL变量,则默认情况下执行/ bin / sh;否则,如果提供了shell命令,则将执行它。 执行命令的退出状态存储在特殊的$?中。 只读环境变量。
	\lock
		锁定当前会话,直到键入正确的密码。 默认情况下,\ lock尝试使用与运行sqsh的用户相关联的UNIX密码(来自/ etc / passwd或/ etc / shadow)(如果sqsh与crypt库链接),但是如果设置了$ lock变量,则内容 其中的一个用于验证。
Aliases
	以下别名是在sqsh启动时建立的,主要是为了与isql向后兼容而提供的。 可以随时使用\ unalias命令(在提示符下或您的.sqshrc文件中)将其删除。
	! ! 别名是作为类似于csh(1)的历史记录机制提供的,并且是\ buf-append的别名。 在0.7版中,仅提供此别名是为了与早期版本的sqsh向后兼容。 有关新速记机制的详细信息,请参见SPECIAL VARIABLES,$ history_shorthand(新速记与csh更相似)。
	clear
		\clear命令的别名,该别名导致清除并丢弃当前工作缓冲区的内容。 如果将readline编译为sqsh,也会清除屏幕。
	reset
		\ reset命令的别名,该别名导致清除当前工作缓冲区的内容并将其复制到历史记录(如果处于交互模式)。
	exit[x]
	quit[x]
		\exit [x]命令的别名导致当前的read-eval-print循环完成。
	edit
	vi
	emacs
		这些是\ buf-edit命令的别名。 有关\ buf-edit和别名之间相互作用的信息,请参见COMMANDS-Buffers。
	go
		作为\ go命令的别名提供(出于明显的原因)。
	Help
		作为\ go命令的别名提供(出于明显的原因)。
	In-Line \go
	如果变量$ semicolon_hack设置为1(启用),则sqsh支持所谓的内联\ go功能。 这使得当前命令批处理可以通过附加“;”一步式终止并发送到数据库。 到当前工作缓冲区的末尾。 这允许
		1> sp_who;
   	以与键入相同的方式进行操作:
       	1> sp_who
       	2> \go
	同样,分号后面的所有内容都将传递给\ go命令,就像它作为普通命令运行一样:
		1>	sp_who ; 2>/dev/null | more
	与大多数其他isql替代产品不同,sqsh尝试对分号保持精明。 如果分号包含在一组单引号或双引号中,则不会解释。 这包括多个引号。 例如:
		1> select "This is a multiple line
       	2> quote; it is smart!" ;
	在上面的示例中,将仅解释第二个分号(该行末尾的分号)。 变量$ semicolon_cmd是一个字符串,其中包含将由分号(默认为\ go)替换的命令。 但是您可以将其更改为\ bcp例如并执行:
		1>	select * from pubs2..titles; -S... tempdb..titles
	在sqsh-2.2.0中,您还可以设置变量$ semicolon_hack2以允许分号触发一行上的多个命令。 如果设置了此选项,则不能使用上面的构造将其他参数传递给\ go命令。 但是当然您可以根据需要更改$ semicolon_cmd,因为此命令将用于执行SQL批处理。
				echo "exec sp_who;exec sp_helpdb;\echo Done;" | sqsh -S... -U... -P...
	在此示例中,分号充当SQL缓冲区的\ go命令,并充当将按顺序执行的sqsh命令的命令分隔符。 请注意,$ semicolon_hack2优先于$ semicolon_hack。

特殊变量
	通过sqsh的命令行选项可以配置多个选项,但是这些选项绝不是完整的。 sqsh行为的许多方面只能通过设置特殊变量来进行修改。 (实际上,命令行选项实际上只为您设置了这些变量)。
	可变数据类型
		紧随其后的所有变量旁边是可以设置它们的数据类型。 任何尝试使用不接受的数据类型设置变量都会失败。
		string
			任何字符序列。
		boolean
			布尔值的正值可以表示为“ True”,“ Yes”,“ 1”或“ On”(不区分大小写),布尔值的负数可以表示为“ False”,“ No”,“ 0”, 或“关”(不区分大小写)。 但是,在内部,变量的值将始终表示为“ 1”或“ 0”。
		path
			必须是sqsh程序可读的路径名。
		int
			必须为一位或多位数字。 请注意,某些变量还限制了整数的范围。
		date-spec
			这是用于指定date(1)命令或strftime(3C)和cftime(3C)标准C库函数的日期和时间的格式的字符串。 例如,'%H:%M:%S'以24小时格式指定小时的时间,然后是冒号,然后是分钟,然后是冒号,然后是秒。
		float-format
			字符串,格式为ps,其中p是浮点值的总精度(要显示的总位数,包括小数点后的位数),而s是值的小数位数(后跟位数的总位数) 要显示的小数)。
		Variables
		以下变量在sqsh中具有特殊含义,这些变量的设置会更改Shell的行为。
		$? (int)
			此只读变量可能包含以下返回值:
			•   从严重性> 10的SQL Server(@@ errno)返回的最新错误号(以上参考消息)。
           	•   先前执行的管道命令的退出值。
           	•   最近执行的sqsh函数的返回值。
           	•   最后执行的\ if语句的结果:
               	0 - 测试评估为True。
               	1 - 测试评估为False.
               	2 - 测试规范中存在错误。
		$# (int)
			包含传递给sqsh函数或脚本的参数数量。
		$* (string list)
			扩展为调用时提供给函数或脚本的参数的完整列表。
		${0}...${N} (int)
			用于引用位置函数自变量。 参数$ {0}是被调用函数的名称,$ {1}是第一个参数,以此类推。
		$$
			扩展为当前正在运行的sqsh会话的进程ID。
		DISPLAY
			可能包含使用\ go -x时X服务器用于放置XWindows结果窗口的DISPLAY的名称。 默认为$ DISPLAY shell环境。
		Appname
			包含sqsh用于向服务器标识自身的名称。 默认为sqsh-2.1.7。 可以从sysprocesses表中检索应用程序名称,例如:从master.dbo.sysprocesses中选择program_name,其中spid = @@ pid;
		autouse (string)
			注意:此变量的含义已被弃用。
			如果设置了$ autouse,但未设置$ database变量,则一旦建立连接,此变量将使\ connect执行“ use $ autouse”。
			也可以使用-D命令行选项设置此变量。
		banner (boolean)
			关闭启动时显示的标题消息,此变量的默认值为1,也可以使用-b命令行参数关闭。
		batch_failcount (int)
			此内部变量用于跟踪执行失败的批次数(本质上是错误处理程序被调用的次数)。
			每当遇到严重性为$ thresh_fail的错误时,该批处理就被视为失败。 当$ batch_failcount达到$ thresh_exit时,sqsh退出,其退出值是失败的批次总数。 将$ batch_failcount设置为字符串“”将导致其重置为零,任何其他值可能会产生不可预测的结果。
			有关详细信息,请参见退出状态。
		batch_pause (boolean)
			在每个批次执行后,导致显示“ Pauseed。Hit enter to Continue ...”消息。 该变量与$ echo结合使用,对于调试使用-i选项指定的SQL脚本非常有用。
		bcp_colsep (string)
			在BCP样式输出期间用作列之间的分隔符(请参见$ style配置变量和\ go命令的-m选项)。 默认设置为“ |”。
		bcp_rowsep (string)
			在BCP样式输出期间用作行之间的分隔符(请参见$ style配置变量和\ go命令的-m选项)。 请注意,自动添加了换行符(“ \ n”),因此不应提供。 默认设置为“ |”。
		bcp_trim (boolean)
			控制BCP样式输出是否修剪固定长度列的尾随空格。 默认值为“ True”。
		builddate (none)
			只读变量,指定编译sqsh可执行文件的日期。
		buildtime (none)
			只读变量,指定编译sqsh可执行文件的时间。
Zhǐ dú biànliàng, zhǐdìng biānyì sqsh kě zhíxíng wénjiàn de shíjiān.
		chained (boolean)
			如果设置,则sqsh使用“链接”事务模式(也称为“ AutoCommit off”)。 设置此项对当前连接没有影响。 可以通过命令行参数-n设置。
		charset (string)
			如果在与SQL Server建立连接之前设置了此变量,则在连接期间sqsh将请求服务器与请求的字符集之间进行转换。 建立连接后,此变量将自动设置为正在使用的当前字符集。
		clear_on_fail (boolean)
			通常,每当运行\ go命令时,sqsh都会清除当前工作缓冲区中的内容,并将其移至历史记录。 将$ clear_on_fail设置为0,如果在将内容发送到数据库时遇到故障,则使当前工作缓冲区保持完整。 默认值为1或on。
		colsep (string)
			使字符串colsep用于定界SQL列输出列,默认为“”,也可以通过命令行参数-s设置。
		colwidth (int)
			用于控制漂亮显示样式显示的最大列宽(请参见下面的$ style)。 如果列的行超出此宽度,则将以相对吸引人的方式将其包装在$ colwidth字符处。 但是请注意,如果有足够的屏幕宽度来容纳所有列,则可能会超过$ colwidth,直到达到屏幕宽度为止。
		database (string)
			如果在建立与SQL Server的连接之前设置了此变量,则在建立连接后立即执行“ use $ database”。 建立连接后,此变量将自动设置为当前数据库上下文。
		date (date-spec)
			可以使用日期格式设置此变量(请参见手册页中的date(1)),并且该变量将以提供的格式扩展到当前日期。 此变量的默认格式为%d-%b-%y(例如1996年2月2日)。
		datefmt (date-spec)
			可以使用类似于$ date的日期格式设置此变量,并用于控制所有SQL Server DATE列的显示格式。 (类似于$ datetime。)请注意,扩展字符串总共只能使用63个字节,其余部分将被截断。
		datetime (date-spec)
			可以使用类似于$ date和$ time的日期格式设置此变量,并用于控制所有SQL Server DATETIME,BIGDATETIME和SMALLDATETIME列的显示格式。 请注意,总共只有63个字节可用于扩展字符串,其余部分将被截断。
			请注意,此功能依赖于操作系统特定的语言环境信息和$ localeconv的设置来确定诸如月份和日期的名称,而不是通过CT-Lib语言环境信息。 这意味着日期格式可能会使用-z标志根据要求与语言环境不匹配。 例如,如果sqsh在为美国英语配置的操作系统上运行,但是使用-z请求法语作为选择的语言,则$ datetime的使用将使所有日期信息以美国英语而不是法语显示。
			变量中定义的普通字符将保留在原位,而不进行任何转换。 在显示列值的过程中,将根据strftime手册页中的定义替换由'%'字符引入的字符。
			[]
				显示SMALLDATETIME列时,一对大括号(“ [”和“]”)之间包含的所有内容都将被删除。 此功能对于删除无论如何都不适用于SMALLDATETIME的秒,毫秒或微秒值特别有用。 对于DATETIME或BIGDATETIME列,将仅删除实际的花括号。
			%q
				指定DATETIME和TIME的毫秒,以及BIGDATETIME和BIGTIME数据类型的毫秒。 在早期版本的sqsh中,%u指示符用于datetime数据类型的毫秒部分。 但是,由于strftime使用%u表示星期几,因此自sqsh-2.3起将其替换为%q。 例如,当使用默认的C语言环境时:
					1> \set datetime='%e %b %Y %H:%M[:%S.%q]%p'
                   	1> select convert(bigdatetime,getdate())
                  	2> select convert(smalldatetime,getdate())
                   	3> go
                   	-----------------------------
                   	22 Jul 2013 13:26:52.938000PM
                  	-------------------
                   	22 Jul 2013 13:27PM
		debug (string)
			如果已在启用调试的情况下(-DDEBUG)编译了sqsh,则可以使用此变量来控制显示的调试输出量。 $ debug可以设置为下列单词的管道(|)分隔符(逻辑或)集,以打开各种调试功能:ALIAS,AVL,BCP,DISPLAY,ENV,ERROR,EXPAND,FD,HISTORY(简称HIST ),作业,READLINE(简称RL),RPC,SCREEN,SIG,SIGCHLD(或SIGCLD),TDS或ALL。 也可以通过-l启动选项进行设置。
		debug_tds_capture (string)
			启用TDS调试后,并使用有效的文件名定义此变量,调试跟踪将记录到此文件中,并可以使用Ribo进行分析。 您可能需要OpenClient库的devlib版本与sqsh链接才能使用此选项。 有关详细信息,请参见Sybase SDK文档中的ct_debug函数。
		debug_tds_logdata (string)
			启用TDS调试后,并使用有效的文件名定义此变量,OpenClient将使用所有可能的调试信息(CS_DBG_ALL)编写调试日志。 另请参见上面的选项。
		defer_bg (boolean)
			通常,当作业在后台运行时(通过命令行上的“&”),该作业的输出将推迟到一个临时文件(位于$ tmp_dir中),直到用户请求使用\显示该输出为止。 显示工作ID。 这样,作业的结果将不会干扰用户的操作。 将此变量设置为false将不会创建任何延迟的输出文件,并且不会立即将输出发送到屏幕
		echo (boolean)
			将$ echo设置为on(1)会使通过\ go命令提交给数据库的每个命令显示在输出之前。 此变量的缺省值为0(或关闭),也可以使用-e命令行选项进行设置。
		encryption (boolean)
			在建立与服务器的连接之前设置$ encryption变量将导致使用客户端密码加密来启动登录连接。 也可以使用-X命令行选项设置此变量。 在\ connect,\ reconnect或\ bcp命令上使用-X选项时,也会进行客户端密码加密。 请注意,net密码加密要求(15.0.2)配置参数的Sybase ASE设置可能会强制您使用客户端密码加密。 当所使用的CT-Lib版本支持sqsh-2.1.9时,它支持RSA密码加密。 如果上述ASE配置参数设置为2,则需要RSA密码加密。旧版本的sqsh仅支持值1(CT-Lib内部加密算法)。
		exit_failcount (boolean)
			将此值设置为1会使sqsh在无错误终止时返回$ batch_failcount而不是0的退出状态。 有关详细信息,请参见退出状态。 默认值为0。
		exit_value (int)
			通过指定退出代码(例如\ exit 3)或使用别名exit或quit命令之一退出sqsh时,此值将分配给$ exit_value变量。 您也可以使用\ set命令分配一个值。 当sqsh确定此变量在终止期间具有非零值时,该值将用作退出代码。 有关详细信息,请参见退出状态。
		expand (boolean)
			默认情况下,当执行\ go命令时,当前工作缓冲区的内容将被扩展到所有环境变量,然后再发送到数据库以执行。 通过将此变量设置为“ 0”,缓冲区将不再被扩展,然后再发送到数据库。 当您(1)缓冲区中的字符串包含“ $”并且您不希望对其进行扩展时,或者(2)出于性能原因,这很有用。 执行变量扩展需要时间(以及缓冲区的额外副本)。
		filter (boolean)
			在发送到SQL Server之前,通过外部程序(由下面的$ filter_prog变量定义)切换SQL批处理的过滤。默认为'0'或'off'。
		filter_prog (string)
			定义在将SQL批处理发送到SQL Server之前将通过其过滤的外部程序。 如果$ filter设置为'0'或'off',则忽略此变量。 默认值为“ m4-”。
		float (float-format)
			定义sqsh显示的所有浮点值的显示格式(精度和比例)。 默认值为“ 18.6”。 请注意,超出定义的精度的值不会被截断,因此将此值设置得太低可能会导致结果集中的列未对齐。
		footers (boolean)
			切换结果集后的“((受影响的%d行)”。 此变量的默认值为“ 1”。
		headers (boolean)
			切换结果集之前的列标题。 此变量的默认值为“ 1”。
		help_dir (path)
			这是\ help命令使用的帮助文件的位置,通常默认为/ usr / local / lib / sqsh / help之类的内容。
		hist_auto_save (int)
			当变量$ histsave打开并且$ hist_auto_save变量的值大于0时,在修改历史缓冲区的$ hist_auto_save之后,历史记录将自动保存到$ history。 值为0(默认值)时,将不执行自动历史记录保存。
		histmerge (boolean)
			启用此选项后,sqsh会将磁盘上历史记录的内容与内存中的历史记录合并,然后再将历史记录写回磁盘。 当其他sqsh会话也已写入磁盘上的同一历史记录文件时,这是为了防止历史记录文件中的数据丢失。 默认情况下,此选项是关闭的,当您退出sqsh或由于设置了$ hist_auto_save而自动保存历史记录时,它将仅覆盖现有历史记录文件。
		histnum (int)
			包含执行\ go命令后立即将分配给当前命令批处理的历史编号。 该变量应被视为只读变量。 另请参见有关$ histunique变量的讨论。
		history (path)
			这是历史文件的位置,用于在启动和关闭期间存储和检索用户的历史记录。 默认为$ HOME / .sqsh_history。 每次由sqsh引用此变量时都会对其进行扩展,其方式与每次显示提示时引用$ prompt的方式相同。
		history_shorthand (boolean)
			该变量仅在交互式会话中有意义。 如果设置,则启用以“ sh”历史记录样式(例如“!40”)将任何命名缓冲区或历史记录缓冲区附加到当前工作缓冲区的功能。 使用此功能时要小心,sqsh在查找历史速记时并不是很聪明,因此可能会引起混淆(尽管它足够聪明,可以忽略带引号的字符串中的!)。
		histsave (boolean)
			sqsh使用此变量的值指示是否在终止sqsh之前将历史记录保存到$ history。
		histsize (int)
			此变量的值用于更改由sqsh维护的历史记录条目的最大数量(默认值为10)。 请注意,减小此变量的值会导致某些历史记录条目丢失。
		histunique (boolean)
			如果设置,sqsh维护已执行缓冲区的MRU-LRU顺序,并且不存储重复的命令缓冲区。 例如,观察以下情况:
				LINUX1502.user1.master.1> \history
               	(1) sp_who
               	(2) grant role mon_role to sa_role
               	(3) select * from monProcessActivity
               	(4) select @@authmech,show_sec_services()
               	(5) select @@servername,@@authmech,show_sec_services()
               	LINUX1502.user1.master.1> sp_who
               	LINUX1502.user1.master.2> go
               	... output omitted
               	LINUX1502.user1.master.1> \history
               	(1) grant role mon_role to sa_role
               	(2) select * from monProcessActivity
               	(3) select @@authmech,show_sec_services()
               	(4) select @@servername,@@authmech,show_sec_services()
               	(5) sp_who
			sp_who是最后执行的命令,缓冲区-最初是列表中的最后一个-现在位于列表顶部。 重用已经存在的缓冲区时,$ histnum变量的值不会更改。
		hostname (string)
			在连接过程中用于向SQL Server指示sqsh从其连接的主机的名称。 也可以使用-H标志设置此变量。
		ifs (string)
			内部场分隔符列表。
		ignoreeof (boolean)
			默认情况下,如果用户在空白行上按^ d(control-D)并编译了readline支持,则sqsh终止。如果在sqshrc文件中设置了$ ignoreeof,则会收到警告消息:
				CTRL-D:使用“退出”或“退出”离开sqsh shell。
			这等效于在bash shell中使用“ set -o ignoreeof”。
		interactive (boolean)
			这是一个内部使用的变量,用户可能不应更改。 如果$ interactive为'0',则不显示提示,既不读取也不写入历史记录,并且禁止某些用户消息
		interfaces (path)
			这是interfaces文件的完整路径名,默认为$ SYBASE / interfaces。
		keytab_file (string)
			用于Kerberos和DCE用户身份验证安全性机制。 对应于-K启动选项。
			另请参见有关Kerberos支持的讨论
		keyword_completion (int/string)
			仅当GNU Readline支持已编译到sqsh中时,此变量才适用。 $ keyword_completion用于控制readline中的T-SQL关键字完成功能,可以使用0到4之间的整数或字符串none,lower,upper,smart或精确的其中之一进行设置。 如果将其设置为0或无,则不执行任何关键字补全(这是默认设置)。 小于或为1,则无论输入的是部分完成的关键字是什么情况,sqsh都会以小写形式完成该关键字。 upper或2强制使用大写,smart或3进行补全,并根据case决定部分关键字的第一个字符,并在与.sqsh_words中定义的完全相同的情况下完全补全关键字(对于 内置的T-SQL关键字,这将是小写)。 sqsh-2.5的新功能是,当常规Readline补全与带有关键字的键入字符串不匹配时,将在当前目录中尝试文件名补全。 例如:
				SYBASE.sa.master.1> \lcd $SYBASE/$SYBASE_ASE/scripts
               	\lcd: local directory changed to: /opt/sybase/ASE-15_0/scripts
               	SYBASE.sa.master.1> \run -n -i ./instm<TAB>
           	生成完整的文件名 "./instmsgs.ebf".
		keyword_dynamic (boolean)
			最初登录服务器或使用use database命令更改数据库上下文时,此变量控制完成列表中关键字的动态加载。当此变量设置为“ On”(默认为“ Off”)时,将执行通过$ keyword_query变量提供的查询,并将查询结果集加载到Readline完成列表中。这仅适用于Sybase ASE和Microsoft SQL服务器。此变量还控制要由Readline自动完成的列列表的动态加载。当对象名称后跟一个点并请求完成TAB时,sqsh动态创建属于该对象的列的列表(表,视图,过程),并允许该列或参数名的Readline TAB完成。仅当GNU Readline支持已编译到sqsh中并且$ keyword_completion设置为大于零的值时,此功能才可用。在sqsh-2.4中,还可以使用SQL缓冲区中的对象别名来自动完成。例如,当您在缓冲区中输入以下查询并在别名“ d”和点后键入TAB键两次时,将为“ sysdatabases”表生成一个列名列表,以供进一步完成:
				SYBPROD.sa.tempdb.1> select * from master..sysdatabases d,
               	SYBPROD.sa.tempdb.2>               master.dbo.sysusages u
               	SYBPROD.sa.tempdb.3> where d.<TAB><TAB>
               	d.audflags         d.def_remote_loc   d.durability       d.status2
               	d.audflags2        d.def_remote_type  d.logptr           d.status3
               	d.crdate           d.deftabaud        d.name             d.status4
               	d.dbid             d.defvwaud         d.spare            d.suid
               	d.defpraud         d.dumptrdate       d.status           d.version
               	SYBPROD.sa.tempdb.3> where d.
			这适用于T-SQL连接语法和ANSI内部,外部,左侧和右侧连接语法。 请注意,sqsh现在也可以执行跨数据库自动完成。
		keyword_file (string)
			如果Readline支持已编译到sqsh中,并且sqsh以交互方式运行,则该文件的内容将由Readline用于完成关键字选项卡,而不是使用默认的T-SQL语法关键字集。 默认值为$ HOME / .sqsh_words。 启用$ keyword_dynamic时,它将具有优先权并否决从$ keyword_file加载的列表。
		keyword_query (string)
			此变量包含将在检测到数据库更改时或在初始登录期间执行的查询(消息5701)。 默认查询为:
				select name from sysobjects order by name
			但是您可以提供其他更适合您需求的查询。 例如。
				\set keyword_query="\\
                 select name from sysobjects \\
                 where type in ('U','V','P','S') \\
                 union \\
                 select name from sybsystemprocs..sysobjects \\
                 where type='P' \\
                 order by name"
			此功能由变量$ keyword_completion和$ keyword_dynamic控制,并且仅当GNU Readline支持已编译到sqsh中时才可用。
		language (string)
			在与服务器建立连接时,将使用$ language变量来指定用于显示系统提示和消息的本国语言。 该变量将自动跟踪服务器的当前语言设置。 也可以通过-z标志设置。
		lineno (int)
			这是一个内部变量,不应由用户更改。 它用于维护当前工作缓冲区中键入的行号。
		linesep (string)
			用于为水平显示样式配置行分隔符,默认为“ \ n \ t”。
		localeconv (boolean)
			一个布尔变量,当设置为true时,将导致操作系统语言环境用于显示所有日期时间(DATETIME,SMALLDATETIME,TIME,DATE,BIGDATETIME和BIGTIME)以及其中的数字,十进制,实数,浮点数和货币/小额货币数据类型 结果集。 当此变量设置为false(即默认值)时,sqsh将使用内部C / POSIX语言环境来确定如何显示这些数据类型。 例如:
			~$ export LANG=nl_NL.utf8
               ~$ locale -ck LC_TIME
               LC_TIME
               abday="zo;ma;di;wo;do;vr;za"
               day="zondag;maandag;dinsdag;woensdag;donderdag;vrijdag;zaterdag"
               abmon="jan;feb;mrt;apr;mei;jun;jul;aug;sep;okt;nov;dec"
               mon="januari;februari;maart;april;mei;juni;juli;augustus;september;oktober;
                    november;december"
               am_pm=";"
           	...

           ~$ sqsh -Llocaleconv=On -Ldatetime="%A %e %B %Y" -C"select getdate()"
            ---------------------------
                   maandag 22 juli 2013

           (1 row affected)
           ~$ sqsh -Llocaleconv=Off -Ldatetime="%A %e %B %Y" -C"select getdate()"
            ---------------------------
                    Monday 22 July 2013

           (1 row affected)
		此外,根据语言环境,money,numerical,decimal,float和real数据类型中的小数点说明符可能会显示为“,”。 请注意,在显示数字数据值时,sqsh不会考虑“千千sep”。
		lock (string/write-only)
			定义\ lock命令使用的密码。 如果未设置或将其设置为字符串“ NULL”,则使用运行sqsh的用户的UNIX密码(如果可能)。 请注意,如果引用了$ lock,它将始终扩展为字符串“ * lock *”。
		login_timeout (int)
			尝试与数据服务器建立新连接时要等待的秒数。 默认值为0(无限等待)。 另请参见-T命令行选项。
		max_timeout (int)
			控制在会话中止之前查询达到其超时值所需的次数。 请参阅$ query_timeout和-Q命令行标志。当达到$ max_timeout限制时,将显示以下消息,并且sqsh以值255退出。
			检测到查询或命令超时,会话中止
            客户端连接已检测到这x次
            超过max_timeout限制
		maxlen (int)
			控制将在单个列中显示(在任何显示模式下)的最大数据量。 此设置将自动将特别大的数据类型(例如TEXT)的输出截断为提供的值。 默认设置是32768字节(32KB)。
		newline_go (boolean)
			此标志用作支持\ go命令的“空”别名的可怕组合,也就是说,等效于在命令行上提供“ -c”或“ -c”。 启用后,空行将解释为对\ go命令的调用。 不建议使用此功能,但提供此功能是为了完整性。
		nosepline (boolean)
			用漂亮的输出样式抑制分隔线。
		output_parms (boolean)
			用于启用或禁用存储过程中输出参数结果集显示的标志。 默认为启用显示。
		p2faxm (int)
			实现“将消息打印到文件(P2F)”功能。 此变量与$ p2fname结合使用,并指定了将发送到终端窗口的每批消息数的阈值。 如果超过阈值,剩余的消息将被发送到指定的文件。默认值为NULL,将禁用P2F功能。 同样,分配的值为0将禁用此功能。 此功能仅在交互模式下可用,并且可以防止服务器消息在屏幕上意外滚动。 例如:
				SYBASE.sa.tempdb.1> \set p2fname=/tmp/sqsh_p2f.out
           		SYBASE.sa.tempdb.1> \set p2faxm=10
           		SYBASE.sa.tempdb.1> create clustered index keys_cx on keys(id)
           		SYBASE.sa.tempdb.2>   with ignore_dup_row
           		SYBASE.sa.tempdb.2> go
           		Warning: deleted duplicate row.  Primary key is '0'
           		Warning: deleted duplicate row.  Primary key is '1'
           		Warning: deleted duplicate row.  Primary key is '2'
           		Warning: deleted duplicate row.  Primary key is '3'
           		Warning: deleted duplicate row.  Primary key is '4'
           		Warning: deleted duplicate row.  Primary key is '5'
           		Warning: deleted duplicate row.  Primary key is '6'
           		Warning: deleted duplicate row.  Primary key is '7'
           		Warning: deleted duplicate row.  Primary key is '8'
           		Warning: deleted duplicate row.  Primary key is '9'
           		Warning: Number of printed server messages exceeds p2faxm=10 limit for current batch.
                Remaining server messages will be printed to file: /tmp/sqsh_p2f.out
		p2fname (path)
			包含上述“将消息打印到文件(P2F)”功能的文件名。 默认值为NULL,这将禁用P2F功能。 如果指定的文件已经存在,则将附加新数据。
		packet_size (int)
			定义用于与SQL通信的TDS数据包的大小。 更改变量的值不会影响当前连接,但将在下一个\ reconnect命令生效。 指定值为NULL表示需要默认的数据包大小。
		password (string/write-only)
			这是用户的当前密码。 可以使用显式的“ NULL”字符串分配NULL密码。 出于安全原因,在引用$ password变量时,它将始终扩展为字符串“ * password *”。
		password_retry (boolean)
			当变量打开并且sqsh以交互模式启动时,如果登录失败,sqsh将再次要求输入密码。 设置为“ off”时,sqsh将立即终止。 默认为开。
		principal (string)
			与$ DSQUERY名称不同时,在Kerberos用户身份验证中用作服务器主体名称。 与-R启动选项相对应。
			另请参见有关Kerberos支持的讨论。
		prompt (string)
			sqsh使用此变量来构建当前提示。 每次显示提示时,$ prompt中包含的所有变量都会展开。 其默认值为“ $ {lineno}>”。 另请参阅下面有关颜色支持的讨论。
		prompt2 (string)
			当sqsh需要其他输入时(例如,在行继续期间),在交互式使用期间将扩展并显示此提示的内容。 默认值为'->'。
		query_timeout (int)
			等待查询返回数据的秒数。 如果达到超时,查询将中止(取消)。 另请参见$ max_timeout和-Q命令行选项。
		rcfile (path)
			包含一个以冒号(:)分隔的sqsh资源(sqshrc)文件列表。 默认设置为/ etc / sqshrc,后跟$ HOME / .sqshrc)。
		readline_histignore (string)
			如果将readline支持编译为sqsh,则可以控制从$ readline_history指定的readline历史文件中过滤掉命令行中的哪些命令或语句。 它是一个用冒号(:)分隔的字符串或一个包含由“ RE:”标识的正则表达式的字符串。 例如:
				\set readline_histignore='go:lo:mo:exit:quit:vi:!!:GO'
           		or
           		\set readline_histignore='"RE:^[glm]o$|^cd |^exit$|^quit$|^vi$"'
			第二个示例中的正则表达式以RE:开头,建议在引号和双引号之间提供字符串,以防止由于管道字符引起的扩展和显示问题。 正则表达式不区分大小写。
		readline_history (string)
			如果将readline支持编译为sqsh,则逐行历史记录的内容将被写入$ readline_history变量指定的文件中。 默认值为$ HOME / .sqsh_readline。
		readline_histsize (int)
			如果将readline支持编译到sqsh中,则$ readline_histsize的值将指定逐行记录在readline中的行数。 将此值设置为0将导致保存每一行。 默认值为100。
		real (float-format)
			定义sqsh显示的所有实数值的显示格式(精度和比例)。 默认值为“ 18.6”。 请注意,超出定义的精度的值不会被截断,因此将此值设置得太低可能会导致结果集中的列未对齐。
		repeat_batch (boolean)
			当设置为On或True时,使用空SQL缓冲区执行的\ go将导致重新执行先前的批处理。
		secmech (string)
			用于用户身份验证的安全性机制的名称。 例如csfkrb5。 使用-Z选项时,可以指定安全性机制的名称,或者当不提供secmech时,OpenClient将使用默认值,即$ SYBASE / $ SYBASE_OCS / config / libtcl.cfg文件中的第一个安全性条目 。 请注意,使用的名称必须与objectid.dat文件中相应的secmech条目的名称匹配。当建立与服务器的连接时,实际的secmech名称将存储在$ secmech变量中。
		secure_options (string)
			描述用于用户身份验证安全机制的安全选项。 对应于-V启动选项。
			另请参见有关Kerberos支持的段落。
		script (string)
			如果使用-i标志运行sqsh,则此变量包含正在执行的脚本的名称。
		semicolon_cmd (string)
			启用$ semicolon_hack(请参见下文)后,在SQL缓冲区中遇到分号时,将执行此变量的内容。 该变量默认为字符串'\ go'。
		semicolon_hack (boolean)
			切换使用“;”的能力 作为嵌入式命令终止符。 不建议使用此功能,因为只有足够的用户抱怨此功能。 请参阅“命令,内嵌\ go”部分。
		semicolon_hack2 (boolean)
			切换使用多个';'的能力 作为嵌入式命令终止符。 请参阅“命令,内嵌\ go”部分。
		session (string)
			连接到服务器之前将要处理的会话文件的位置。 该变量将被扩展,因此它可能包含环境变量。
		SHELL (string)
			用于执行管道并由\ shell命令使用的Shell名称(默认为'/ bin / sh')。
		statistics (boolean)
			将$ statistics设置为1会使计时统计信息在成功执行每批SQL时显示。 也可以通过-p命令行标志或通过向\ go命令提供-p来设置此变量。 $ statistics默认为0。
		style (string)
			选择结果集显示样式。 当前支持八种样式。 水平仪(也可以定义为水平仪或水平仪)与isql的输出非常相似,具有传统的列式输出。
			vert(或vertical)样式旋转输出,以便每一行都由列名和列值表示。 这对于查看特别宽的输出非常有用。
			bcp样式以适合于bcp将结果集重新存储到另一个表中的格式显示结果。 也就是说,每个列值都由$ bcp_colsep分隔,最后一列由$ bcp_rowsep分隔,后跟换行符(\ n)。 如果未定义$ bcp_colsep或$ bcp_rowsep,则'|' 用作默认分隔符。 请注意,此输出不适用于COMPUTE列,并且对所有数据类型都使用默认的转换方法(也就是说,datetime列可能会截断毫秒)。
			csv显示样式以逗号分隔的结构形式输出所有结果集。 例如,此模式是将结果集导入电子表格程序的理想选择。
			html显示样式以HTML <TABLE>构造的形式输出所有结果集。 该模式非常适合将sqsh用作CGI应用程序。
			元显示样式仅输出与结果关联的元数据信息,并丢弃实际的行结果。 此模式对于调试从完整的直通Open Server网关生成的结果集或对真正从服务器返回的内容感兴趣的人员很有用。
			漂亮的显示样式使用常规的ASCII字符作为边框来生成类似于表格的输出。 与horiz显示模式一样,此模式不执行任何显式的换行。 但是,$ colwidth变量可用于控制屏幕上给定列的最大宽度。 如果该列的宽度超过$ colwidth个字符,则以相对吸引人的方式包装它。 请注意,如果有足够的屏幕宽度来容纳列而不进行换行,则可能会超出$ colwidth。
			none显示样式禁止显示所有结果(但是实际上会从SQL Server检索结果信息)。 当与-p标志(或$ statistics变量)一起使用以收集准确的性能统计信息时,此功能特别有用。
		term_title (string)
			设置此变量后,sqsh将重置其正在运行的当前终端(xterm)窗口的名称。适用于xterm,rxvt,putty和MS-Windows CMD窗口。 该名称由sqsh启动名称组成,后跟$ term_title变量的扩展值。
		thresh_display (int)
			设置将向用户显示消息的最小SQL Server错误严重性,默认值为0,有效范围为0到22(含)之间。
		thresh_exit (int)
			定义在sqsh中止之前可能遇到的严重性级别$ thresh_fail的最大错误数。 这主要对非交互式脚本很有用,但在交互式会话中允许使用。 将$ thresh_exit设置为0将禁用此功能。 有关详细信息,请参见“退出状态”部分。
		thresh_fail (int)
			设置将被视为失败批处理的最低SQL Server严重性级别。 该值的最小值为0(表示不是信息消息的任何错误),最大值为22。每当超出$ thresh_fail时,变量$ batch_failcount就会增加1。有关详细信息,请参见EXIT STATUS部分。
		time (date-spec)
			可以使用时间格式设置此变量(请参见手册页中的date(1)),并且该变量将以提供的格式扩展为当前时间。 此变量的默认格式为%H:%M:%S(例如14:32:58)。
		timefmt (date-spec)
			可以使用类似于$ time的时间格式设置此变量,并用于控制所有SQL Server TIME和BIGTIME列的显示格式。 (类似于$ datetime。)请注意,扩展字符串总共只能使用63个字节,其余部分将被截断。
		tmp_dir (path)
			该目录包含将由sqsh内部使用的临时文件写入的目录。 这些文件在缓冲区编辑(\ buf-edit命令)过程中生成,或维护后台作业的输出延迟文件。 此变量的默认值为/ tmp。
		usedbcheck (boolean)
			当此变量设置为“ On”(默认为“ Off”)并且数据库名称带有-D参数且sqsh以批处理模式运行(即非交互式)时,将检查指定的数据库 是可访问的,否则sqsh将以退出代码254中止。还将显示以下错误消息:
			sqsh: ERROR: Unable to use database '...' in batch mode
			这是为了防止错误地在错误的数据库(通常是登录名的默认数据库)(例如,主数据库)中执行SQL脚本。
		username (string)
			当前连接到数据库的用户名。
		version (none)
			此只读变量包含当前版本号。 (sqsh-2.1.7)
		width (int)
			SQL输出的当前宽度。
		xgeom (string/int)
			如果将X11支持编译到sqsh中,则此值用于配置X显示的默认窗口大小(以字符为单位)。 此变量的格式必须为WxH或仅为W,其中W是窗口的宽度,H是窗口的高度。 如果未提供窗口的高度,则假定为25行。 如果未设置$ xgeom,则将$ width用作默认宽度,并假定高度为25。如果未设置,则假定为80x25。
		xwin_title (string)
			如果将X11支持编译到sqsh中,并且使用\ go或\ rpc命令的-x参数请求X11结果窗口,则此变量将用于设置窗口的标题名称。 可以使用\ go和\ rpc命令的-T选项暂时覆盖。
	Script Execution
		与大多数shell一样,sqsh允许包含SQL和脚本命令的文件直接通过神奇的UNIX#!执行! 惯例。 在大多数UNIX平台上,当操作系统遇到字节#!时。 作为可执行文件的前两个字节,它将自动通过#!之后的指定解释器将文件通过管道传输。 例如,要创建一个可执行的sqsh脚本来运行sp_who,您只需要创建一个如下文件:
			#!/usr/bin/sqsh -i
       		sp_who
       		go
		因此,如果直接执行您的sp_who脚本,它将自动为您启动“ / usr / bin / sqsh -i sp_who”。
		而且,为了使事情变得更加灵活,sqsh支持类似于大多数shell的$ {n}形式的位置参数,它将扩展为sqsh脚本的第n个参数。 例如:
			#!/usr/bin/sqsh -i
       		sp_who ${1}
       		go
		将导致使用提供给sp_who shell脚本的第一个命令行参数的参数执行sp_who存储过程。
		请注意,在括号之间必须包含位置参数,以避免与T-SQL money数据类型发生冲突(如果没有括号,则不会扩展变量)。

EXIT STATUS

  isql的主要抱怨之一是,它在执行处理时没有提供检测错误状态的条件。 Sqsh提供了一种相当复杂但灵活的机制,用于以退出状态的形式返回有关退出原因的有意义的信息(请参阅exit(3))。
  当sqsh开始执行时,两个处理程序与数据库的当前连接相关联,一个是消息处理程序,负责显示任何SQL Server消息或错误的文本,另一个是错误处理程序,负责确定什么。 与错误情况有关(请耐心等待,这些只是宽松的说明)。 并且,与每条消息和错误状况相关的严重性级别是0到22(严重的信息性消息)。
  与这两个消息处理程序相关联的是几个变量,这些变量用于控制其行为或由消息处理程序用作指示符:
    KaTeX parse error: Expected 'EOF', got '&' at position 16: thresh_display &̲emsp;&emsp;消息处理…thresh_fail
    错误处理程序使用此变量来确定sqsh将哪个错误严重性视为失败。 通常,该默认值默认为11,这表示除参考消息以外的任何错误都是失败。 下一个变量将说明该值的重要性。
  KaTeX parse error: Expected 'EOF', got '&' at position 17: …atch_failcount &̲emsp;&emsp;&ems… thresh_fail或更多的错误的总次数。 明确将其设置为的唯一有效值为“”(空字符串),它将将该值重置为0,任何其他值都可能导致不可预测的结果。
  KaTeX parse error: Expected 'EOF', got '&' at position 13: thresh_exit &̲emsp;&emsp;&ems… batch_failcount导致sqsh退出的限制。 如果$ thresh_exit为0,则禁用此功能;换句话说,如果$ batch_failcount = $ thresh_exit并且$ thresh_exit大于0,则sqsh将退出,并以$ batch_failcount作为退出状态返回。
    请注意,除非失败总数未达到$ thresh_exit,否则除非$ exit_failcount设置为1,否则sqsh将以0退出。
  KaTeX parse error: Expected 'EOF', got '&' at position 16: exit_failcount &̲emsp;&emsp;&ems… batch_failcount值(本身可能为0)退出。
  KaTeX parse error: Expected 'EOF', got '&' at position 12: exit_value &̲emsp;&emsp;&ems… exit_failcount和$ batch_failcount值,并仅退出$ exit_value的值。 可以使用\ set命令显式设置此变量,也可以使用\ exit x及其别名对它隐式设置。
  总结一下,这是sqsh在退出时可能返回的错误代码的列表,以及可能返回的错误代码:
  - 0 –
    没有遇到错误。
  - 1…253 –
    在1到253个批处理之间失败(如果您运行了253个以上的批处理,则sqsh的退出状态无法确定…我将来可能会解决此问题)。
  - 254 –
    在非交互式会话期间,调用了显式\ abort,或发出了SIGINT(^ C)。
  - 255 –
    发生了一般的错误情况,例如sqsh的命令行参数错误,内存分配失败,文件访问错误等。
  以下各节提供了变量设置组合的详细示例以及在某些故障情况下退出时产生的结果。在以下示例中假定$ exit_value变量包含0。
  thresh_display=0, thresh_fail=0, thresh_exit=1
    通过这种组合,所有错误消息都将在发生时显示,并且每个错误都将被视为故障情况。 遇到第一个错误时,sqsh将中止,退出状态为1或失败总数($ batch_failcount变量)。 但是,如果在整个过程中没有出错,则返回零。
  thresh_display=0, thresh_fail=0, thresh_exit=3
    这种组合将导致显示所有错误状况,并将所有错误状况视为故障状况。 在达到三个总失败批次后,sqsh将以状态3退出。但是,如果0、1或2个批次失败,则返回0。
  thresh_display=22, thresh_fail=0, thresh_exit=3
    此行为与上一个示例相同,不同之处在于,将禁止显示所有错误消息。 如果您只在乎退出值而不是实际错误,这将特别有用。
  thresh_display=0, thresh_fail=2, thresh_exit=1
    这将导致显示严重性为2或更高的第一个错误,并导致sqsh以失败条件1退出。
  thresh_display=0, thresh_fail=0, thresh_exit=3, exit_failcount=1
    这与上面的第二个示例相同,但是即使$ batch_failcount未达到3,sqsh也会返回失败的批处理总数。
  exit_value=nonzero
    这将覆盖上面说明的所有条件,只是退出特定值。

MISCELLANEOUS

  Colorizing sqsh prompts
    颜色代码以字符串形式表示,例如{1; 2; 3}。 如果sqsh在提示字符串中遇到{(大括号),它将假定提供了颜色代码,并且将如此操作。 不会对颜色代码定义本身的有效性进行检查。 颜色定义由用分号分隔的三个值组成。
    第一个代码定义颜色属性代码,其值可能为:0 =无1 =粗体第二个值定义文本颜色代码:30 =黑色31 =红色32 =绿色33 =黄色34 =蓝色35 =品红色36 =青色37 = 白色第三个值定义了背景颜色代码:40 =黑色41 =红色42 =绿色43 =黄色44 =蓝色45 =品红色46 =青色47 =白色可以省略背景的最后一个颜色代码。 并非所有的颜色和属性组合都会显示出良好的效果,具体取决于您的终端类型和配色方案。 但是以下值在Linux上具有乳白色背景色的xterm以及在Cygwin中具有黑色背景窗口的rxvt上可以正常工作:
      Prompt: Blue text in white background “{0;34;47}”
      Command text: Yellow text “{0;33}”
      Command text: Default text color “{0}”
    sqsh会将颜色代码转换为呈现给readline的实际颜色代码字符串:例如“ \ 001 \ 033 [0; 36; 47m \ 002”。 请注意,如果要在提示中使用大括号,则必须通过指定双括号来避免着色,例如{ {…}}。 例如:
      \set prompt_color=’{0;34;47}’
      \set text_color=’{0}’
      \set prompt='KaTeX parse error: Expected '}', got 'EOF' at end of input: prompt_color{ { DSQUERY. u s e r n a m e . username. username.database.KaTeX parse error: Expected 'EOF', got '}' at position 7: lineno}̲}>text_color ’
    如果已编译sqsh并与启用的readline支持链接,则将自动提供颜色支持。

FILES

  默认值:$ HOME / .sqshrc,$ HOME / .sqsh_session,$ HOME / .sqsh_history,$ HOME / .sqsh_readline,$ HOME / .sqsh_words,$ tmp_dir / sqsh-dfr。*,$ tmp_dir / sqsh-edit。*这些 都可以使用上述内部sqsh变量进行修改。

BUGS

  控制流表达式的添加使sqsh的方式超出了其原始设计的范围,并且通过使用它们被入侵且笨拙的功能(尽管仍然相当有用),这是显而易见的。 结果,这些表达式的处理速度非常慢(与bourne shell相比),并且错误报告也无法帮助调试大型脚本。 不鼓励开发1000多个行脚本。
  背景和管道的组合目前无法正常工作。 发生的情况是,当运行包含管道的后台作业时,sqsh将挂起,直到作业完成为止,这显然不是您想要的。 要对此进行测试,请尝试以下操作:
    1> select * from syscolumns
    2> go | grep id &
  您会发现,直到作业完成,您才不会得到提示。 对于与\ do命令一起使用的管道,同样适用或不适用:
    1> select name from master…sysdatabases
    2> \do | grep syb
  直到该块以\ done完成,这才不再提示您。 因此,您是在黑暗中键入do块本身,因此无法编辑do块或从历史记录列表中检索do块。 因此,您可能已经输入了(希望没有语法错误):
    \echo #1
    \done
  处理完\ done后,将显示结果,然后出现新的提示。
  请将任何其他错误报告给http://sourceforge.net/p/sqsh/bugs功能请求可能会发布到http://sourceforge.net/p/sqsh/feature-requests

注:更多kali相关资讯可关注公众号(bi路),也可以访问个人搭建的kali专属站点笔路(https://www.bilu.asia

kali站点笔路

猜你喜欢

转载自blog.csdn.net/qq_40399982/article/details/113048355