Search code examples
shellperlkshcleartool

A Perl system call must send exactly both characters single & double quote ' "


A Perl system call must send the following string to the UnixShell:

'"XYZ"'

In my Perl script I have used the following command:

system("cleartool mkattr -replace ATTRIBUTE '"$attribute"' lbtype:$label");

Everything is well passed to the Shell Unix, except both uses of the quote character:

'

Indeed,

cleartool mkattr -replace ATTRIBUTE

The above command is passed as it is exactly what I want. The Perl variables $attribute and $label are well interpreted. But I don't know what to do to obtain exactly:

'"XYZ"'

Here XYZ is the value of the Perl variable $attribute OS is AIX (Unix) and Shell is ksh. cleartool is the command line interface of Clearcase but no Clearcase skill is necessary to fix my problem.


Solution

  • If you want to execute a system command and don't have to use any shell syntax like redirects, it's usually better and safer to use the list form of system:

    system(
        'cleartool',  'mkattr', '-replace', 'ATTRIBUTE',
        qq{"$attribute"}, qq{lbtype:$label}
    );
    # or, if you really want to pass both types of quotes:
    system(
        'cleartool',  'mkattr', '-replace', 'ATTRIBUTE',
        qq{'"$attribute"'}, qq{lbtype:$label}
    );
    

    See perldoc -f system

    It's not clear from your question if you want to pass '"XYZ"' or "XYZ".